Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы (http://forum.oszone.net/showthread.php?t=220424)

campbell 13-11-2011 23:36 1794476

скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы
 
Возможно создать такой скрипт, который брал бы урл из переменной и сохралял исходный код веб страницы в файл?

Hector 13-11-2011 23:58 1794503

campbell, тебе нужен ответ в стиле да\нет или скрипт?

campbell 14-11-2011 00:24 1794514

скрипт конечно )

Iska 14-11-2011 06:58 1794612

campbell, используйте сторонние средства для загрузки страницы, например, Wget (Wget for Windows - GnuWin32) или cURL (cURL - Download).

В рамках WSH или PoSH сие также решаемо.

campbell 14-11-2011 18:10 1794982

спасибо пошел разбираться, но чувствую еще вопросы будут..
И если возможно напишите вариант скрипта, который читал бы файл html как исходный код и орентируясь по паре назначенных переменных вытаскивал бы строки.
по примеру назначаешь переменную %A= "^<div class...^>" и он вытаскивает строчку
а вторую двойную переменную т.е начиная с ..<BODY>.. и заканчивая </BODY>
Заранее спасибо

Iska 14-11-2011 20:39 1795122

Что-то мне это напоминает ;)… campbell, у Вас, случайно, не похожий случай?

campbell 14-11-2011 22:32 1795193

ох вот я задачку выбрал (подумалось) =)
Iska в чем-то похоже, завтра сяду на работе плотненько покопаю,
А на самом деле идея казалась простенькой. Если вкратце я собрал разные скрипты с этого и других форумов (пинг серверов, проверка места на файл-хранилищах, дефрагментация и т.д.) и завязал все конечным скриптом обработки и переноса всех логов в один с отправкой на почту, и все бы хорошо)) Но дурная голова рукам, как известно....)) и решил а почему бы после всего не прикрутить к этому еще один скрипт который все это дело распихивал в заранее подготовленный html (и не выкладывал на ftp на закрытую страничку сайта)
Да еще и с других сайтов инфу нужную добирал
(хотя наверно это проще было бы на php сделать)
Вот теперь сижу мучаюсь за одно осваиваю язык.
Кстати хотел бы внести предложение: помимо помощи под конкретные задачки можно было бы завести топик просто для вопросов (глупых и не очень )) ) я бы регулярно пользовался, а то часто пытаясь разобрать скрипт упираешься в пару знаков и часами ищешь инфу, а зачем оно там стоит.

campbell 15-11-2011 14:33 1795574

Код:

@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>&nbsp;/&nbsp;
<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&deg;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 1796312

Тишина ни у кого нет идей?

campbell 17-11-2011 13:58 1797144

помогите с парсером который бы просто удалил из html все теги <...>

Iska 17-11-2011 21:01 1797465

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 1797847

Так закопался в возможности bat/cmd что забыл посмотреть форум
Iska, огромное спасибо

вот только для меня cmd еще в процессе познания а vbs и подавно,
если можно вставьте комментарии, что за что отвечает.
задание сайта и кодировки я разобрал, а вот как, в последствии, происходит обработка полученного исходного кода.

и вывод происходит в окно, а как направить в файл

Iska 18-11-2011 14:41 1797962

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) делаем разбор получившегося html-документа:
а). Получаем коллекцию тэгов «H3».
б). Ищем среди них тэг с классом «typeC».
в). Далее опять же, посредством DOM, продвигаемся по дереву элементов, выделяем потребные нам элементы, получаем их значения.
Цитата:

Цитата campbell
и вывод происходит в окно, а как направить в файл »

Например, используя обработчик «cscript.exe» (вместо «wscript.exe») и перенаправление вывода в файл:
Код:

cscript.exe //nologo "E:\Песочница\0091\0001.vbs" >Result.txt
А какова у Вас глобальная цель?

Delirium 19-11-2011 05:43 1798500

Цитата:

Цитата campbell
топик просто для вопросов (глупых и не очень )) ) я бы регулярно пользовался, а то часто пытаясь разобрать скрипт упираешься в пару знаков и часами ищешь инфу, а зачем оно там стоит. »

Правила форума - одна проблема-одна тема. Если проблема будет с одним и тем же продуктом, создай тему с соответствующим названием и спрашивай сколько угодно :)


Время: 06:36.

Время: 06:36.
© OSzone.net 2001-