Показать полную графическую версию : [решено] скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы
campbell
13-11-2011, 23:36
Возможно создать такой скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы в файл?
campbell, тебе нужен ответ в стиле да\нет или скрипт?
campbell
14-11-2011, 00:24
скрипт конечно )
campbell, используйте сторонние средства для загрузки страницы, например, Wget (http://ru.wikipedia.org/wiki/WGet) (Wget for Windows - GnuWin32 (http://gnuwin32.sourceforge.net/packages/wget.htm)) или cURL (http://ru.wikipedia.org/wiki/Curl) (cURL - Download (http://curl.haxx.se/download.html#Win32)).
В рамках WSH или PoSH сие также решаемо.
campbell
14-11-2011, 18:10
спасибо пошел разбираться, но чувствую еще вопросы будут..
И если возможно напишите вариант скрипта, который читал бы файл html как исходный код и орентируясь по паре назначенных переменных вытаскивал бы строки.
по примеру назначаешь переменную %A= "^<div class...^>" и он вытаскивает строчку
а вторую двойную переменную т.е начиная с ..<BODY>.. и заканчивая </BODY>
Заранее спасибо
Что-то мне это напоминает ;)… campbell, у Вас, случайно, не похожий случай (http://forum.oszone.net/post-1792790.html#post1792790)?
campbell
14-11-2011, 22:32
ох вот я задачку выбрал (подумалось) =)
Iska в чем-то похоже, завтра сяду на работе плотненько покопаю,
А на самом деле идея казалась простенькой. Если вкратце я собрал разные скрипты с этого и других форумов (пинг серверов, проверка места на файл-хранилищах, дефрагментация и т.д.) и завязал все конечным скриптом обработки и переноса всех логов в один с отправкой на почту, и все бы хорошо)) Но дурная голова рукам, как известно....)) и решил а почему бы после всего не прикрутить к этому еще один скрипт который все это дело распихивал в заранее подготовленный html (и не выкладывал на ftp на закрытую страничку сайта)
Да еще и с других сайтов инфу нужную добирал
(хотя наверно это проще было бы на php сделать)
Вот теперь сижу мучаюсь за одно осваиваю язык.
Кстати хотел бы внести предложение: помимо помощи под конкретные задачки можно было бы завести топик просто для вопросов (глупых и не очень )) ) я бы регулярно пользовался, а то часто пытаясь разобрать скрипт упираешься в пару знаков и часами ищешь инфу, а зачем оно там стоит.
campbell
15-11-2011, 14:33
@Echo Off
if exist gismeteo.txt (del gismeteo.txt)
wget.exe http://www.gismeteo.ru/ -F -O gismeteo.txt
exit
вот так получаем html
нужен парсер строк
на примере GISMETEO:там в исходном коде есть такой кусочек
<h2>Погода за окном</h2> <div class="section">
<h3 class="typeC">Москва</h3>
<div class="scity">
<a href="/catalog/russia/251/">Московская область</a> /
<a href="/catalog/russia/">Россия</a></div>
<dl class="cloudness">
<dt class="png" title="Пасмурно" style="background-image: url(http://i.gismeteo.com/static/images/icons/new/d.sun.c4.png)"><br></dt>
<dd>Пасмурно</dd>
</dl> <div class="temp">-1°C</div>
<div class="wicon barp" title="Давление">743<span class="unit">мм рт.ст.</span></div>
<div class="wicon wind"><dl title="Ветер северо-восточный" class="wicon wind2"><dt>СВ</dt><dd>4<span class="unit">м/с</span></dd></dl></div>
<div class="wicon hum" title="Влажность">68<span class="unit">%</span></div>
а и итоге нужно получить:
Москва
-1C
743 мм рт.ст
СВ 4 м/с
68%
campbell
16-11-2011, 14:16
Тишина ни у кого нет идей?
campbell
17-11-2011, 13:58
помогите с парсером который бы просто удалил из html все теги <...>
campbell, я же Вас спрашивал… Пробуйте (WSH):
Option Explicit
Dim strUrl
Dim strOriginalCharset
Dim objHTMLDocument
Dim objHTMLHeaderElement
Dim objHTMLElement
Dim strCity
Dim strDegree
Dim strBar
Dim strWind
Dim strHum
strUrl = "http://www.gismeteo.ru/city/daily/4368/"
strOriginalCharset = "UTF-8"
Set objHTMLDocument = GetDocumentFromURL(strUrl, strOriginalCharset)
For Each objHTMLHeaderElement In objHTMLDocument.getElementsByTagName("h3")
If objHTMLHeaderElement.className = "typeC" Then
strCity = objHTMLHeaderElement.firstChild.nodeValue
Set objHTMLElement = objHTMLHeaderElement.nextSibling.nextSibling.nextSibling
strDegree = objHTMLElement.firstChild.nodeValue
Set objHTMLElement = objHTMLElement.nextSibling
strBar = objHTMLElement.title & " " & objHTMLElement.firstChild.nodeValue & " " & objHTMLElement.firstChild.nextSibling.firstChild.nodeValue
Set objHTMLElement = objHTMLElement.nextSibling
strWind = objHTMLElement.firstChild.title & " " & _
objHTMLElement.firstChild.firstChild.nextSibling.firstChild.nodeValue & " " & _
objHTMLElement.firstChild.firstChild.nextSibling.firstChild.nextSibling.firstChild.nodeValue
Set objHTMLElement = objHTMLElement.nextSibling
strHum = objHTMLElement.title & " " & objHTMLElement.firstChild.nodeValue & objHTMLElement.firstChild.nextSibling.firstChild.nodeValue
WScript.Echo strCity
WScript.Echo strDegree
WScript.Echo strBar
WScript.Echo strWind
WScript.Echo strHum
Exit For
End If
Next
WScript.Quit 0
'=============================================================================
'=============================================================================
Function GetDocumentFromURL(strURL, strCharset)
Const adModeReadWrite = 3
Const adTypeBinary = 1
Const adTypeText = 2
Dim objHTMLDocument
Dim objHTMLBaseElement
Dim arrHtmlText
Dim strUrlDomain
Dim strContent
Set objHTMLDocument = WScript.CreateObject("HTMLFile")
With WScript.CreateObject("VBScript.RegExp")
.Pattern = "^(http://.*?/).*"
strUrlDomain = .Execute(strUrl).Item(0).SubMatches(0)
End With
With WScript.CreateObject("MSXML2.XMLHTTP")
.open "GET", strURL, False
.send
arrHtmlText = .responseBody
End With
With WScript.CreateObject("ADODB.Stream")
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write arrHtmlText
.Position = 0
.Type = adTypeText
.Charset = strCharset
strContent = Replace(.ReadText, "<head>", "<head><base href=""" & strUrlDomain & """>", 1, -1, vbTextCompare)
With WScript.CreateObject("VBScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "(<script[^>]*)"
objHTMLDocument.open
objHTMLDocument.write .Replace(strContent, "<script type='text/plain'")
objHTMLDocument.close
End With
End With
Set GetDocumentFromURL = objHTMLDocument
Set objHTMLDocument = Nothing
End Function
'=============================================================================
Москва
+3°C
Давление 741 мм рт.ст.
Ветер западный 1 м/с
Влажность 96%
campbell
18-11-2011, 11:27
Так закопался в возможности bat/cmd что забыл посмотреть форум
Iska, огромное спасибо
вот только для меня cmd еще в процессе познания а vbs и подавно,
если можно вставьте комментарии, что за что отвечает.
задание сайта и кодировки я разобрал, а вот как, в последствии, происходит обработка полученного исходного кода.
и вывод происходит в окно, а как направить в файл
campbell, код достаточно сложен, если Вы не знаете самой технологии, так что сами по себе комментарии вряд ли помогут.
Если вкратце, то:
1. При помощи регулярного выражения выделяем из URL основной домен.
2. При помощи объекта «MSXML2.XMLHTTP» получаем исходный код страницы.
3. Посредством объекта «ADODB.Stream» конвертируем полученный массив байт в текст (поскольку «MSXML2.XMLHTTP» всегда получает содержимое в кодировке UTF-8 — дополнительно конвертируем в оригинальную кодировку; в данном случае сие необязательно, поскольку оригинал и так в UTF-8, но я оставил данный приём для демонстрации).
4. При помощи вставки тэга «BASE» корректируем относительные ссылки в документе.
5. Чтобы избежать исполнения скриптов — посредством регулярного выражения корректируем тип тэгов «SCRIPT».
6. Посредством DOM (Использование HTML DOM (Document Object Model) в скриптах на базе Windows Script Host (http://www.script-coding.com/DOM.html)) делаем разбор получившегося html-документа:
а). Получаем коллекцию тэгов «H3».
б). Ищем среди них тэг с классом «typeC».
в). Далее опять же, посредством DOM, продвигаемся по дереву элементов, выделяем потребные нам элементы, получаем их значения.
и вывод происходит в окно, а как направить в файл »
Например, используя обработчик «cscript.exe» (вместо «wscript.exe») и перенаправление вывода в файл:
cscript.exe //nologo "E:\Песочница\0091\0001.vbs" >Result.txt
А какова у Вас глобальная цель?
Delirium
19-11-2011, 05:43
топик просто для вопросов (глупых и не очень )) ) я бы регулярно пользовался, а то часто пытаясь разобрать скрипт упираешься в пару знаков и часами ищешь инфу, а зачем оно там стоит. »
Правила форума - одна проблема-одна тема. Если проблема будет с одним и тем же продуктом, создай тему с соответствующим названием и спрашивай сколько угодно :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.