PDA

Показать полную графическую версию : [решено] Помогите реализовать скачивание html страницы и поиск в ней


Страниц : [1] 2

alexmoreman
12-08-2010, 17:10
Подскажите пожалуйста, можно ли и как написать батник выполняющий такие действия:
первым действием идёт скачивание с помощью wget html страницы
wget -c -t 0 Http://sait.ru/452484 -O 452484.html
далее необходимо в скаченном html найти строку
<form action=d/цыфры/цыфры method=GET id="start_download_form">
скопировать из этой строки
d/цыфры/цыфры
и вставить в следующей строке вместо ХХХ
wget -c -t 0 Http://sait.ru/ХХХ -O Fail.avi

NiOl
12-08-2010, 19:07
Пакетным файлом плохо обрабатывать текста, особенно такие как HTML... могут теги поползти еще на этапе чтения... тут что-то по-хитрее надо... в любом случае присоедините в аттач зазипованный пример HTMLки, попробуем...

alexmoreman
12-08-2010, 19:27
Вот пример html страницы.
Также я приложил пример скрипта для nix с помощью bash ,только что то не работает или я неправильно делаю.
пробовал через cygwim

deepred
12-08-2010, 23:56
alexmoreman,

Насчет *.bat - не та это задача, чтобы её решать методами CMD, поэтому предлагаю расположить wget в теле Vbsript:

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False
objIE.Navigate "F:\rem\Primer.html"
While objIE.Busy
WScript.Sleep 200
Wend
Set tag = objIE.Document.getElementByid("start_download_form")
WScript.Echo tag.getAttribute("action") ' смотрим то ли?

Set WshShell = CreateObject("WScript.Shell")
Retval = WshShell.Run ("wget -c -t 0 Http://sait.ru/" & _
tag.getAttribute("action") & "-O Fail.avi", 1, True)
WScript.Echo "Команда выполнена! Код возврата: " & Retval
objIE.Quit


или процедура скачивания полностью на VBS (замена wget):
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
StrTargetHtml = "Http://sait.ru/" & _
tag.getAttribute("action") & "/" & "Fail.avi"

oXMLHTTP.Open "GET", StrTargetHtml, 0

oXMLHTTP.Send
Set oADOStream = CreateObject("ADODB.Stream")
oADOStream.Mode = 3
oADOStream.Type = 1
oADOStream.Open
oADOStream.Write oXMLHTTP.responseBody
oADOStream.SaveToFile "F:\DL\Fail.avi", 2
WScript.Echo "Закачка завершена"

____________________________________________________________________________________________________ _________________

PS: ознакомтесь с темой протестируйте скрипт для обновления утилит от Piriform (CCleaner,Defraggler и тд) (http://forum.oszone.net/thread-181383.html) в ней
предолагается решение похожей задачи средствами CMD - сделано граммотно и аккуратно, но слишком сложно
за счет отсутствия необоходимых алгоритмов в утилитах CMD.

alexmoreman
13-08-2010, 00:38
deepred,
спасибо это очень интересно! Я попробовал но увы почему то не идет и выходит ошибка
http://imglink.ru/pictures/13-08-10/9738e7b33f28c5d67b1755aa3f1fcba5.gif
запускаю с батника так:
wget -c -t 0 Http://share-nn.ru/31032611 -O Primer.html
start script.vbs
Насчет этого в твоём скрипте F:\rem\Primer.html я так понимаю полный путь к файлу?

причина задаться этой проблемои была, в жадности данного хранилища относительно моего провайдера.
вот и приходится wgetом долбиться по ссылкам от 10 до 30 раз для получения как страницы так и файла.
для подобной цели я себе создал 2 .bat
1. wget -c -t 0 Http://sait.ru/452484 -O 452484.html
после скачивания страницы я открываю её и копирую во второй .bat ссылку на файл и его название:
2. wget -c -t 0 Http://sait.ru/d/452484856/765890 -O название файла.avi
поэтому и хочеться этот процесс оптимизировать и не вписывать ссылку на файл вручную.

deepred
13-08-2010, 13:02
alexmoreman,

выходит ошибка »
строка: 11
символ: 23
»

странная ошибка, у меня всё страбатывает как надо, попробуйте снова скопировать код с форума
и вставить в блокнот (а лучше akelpad).

Как вариант попробуйте изменить определение Retval:
Retval = WshShell.Run ("cmd /c wget -c -t 0 Http://sait.ru/" & _
tag.getAttribute("action") & "-O Fail.avi", 0, True)
F:\rem\Primer.html я так понимаю полный путь к файлу? » - да, полный путь...

alexmoreman
13-08-2010, 13:57
deepred,
спасибо огромное тебе! теперь наконец то стало определятся точто вроде нужно.(и в вчерашнем скрипте и с поправками)
http://imglink.ru/pictures/13-08-10/cb7c13bce72c753577163bcedddf622f.gif
но остаются "но" после нажатия OK не запускается wget (не видно работы кансоли(может ты высталил скриптом в тихом режиме?)) и через промежуток выходит это сообщение
http://imglink.ru/pictures/13-08-10/c97cade3589f7acaf0bbf5c1d3dd5955.gif
все файлы (.bat ,.vbs,.wget.exe) лежат в одной папке

deepred
13-08-2010, 14:10
alexmoreman,

WshShell.Run ("cmd /c wget -c -t 0 Http://sait.ru/" & _
tag.getAttribute("action") & "-O Fail.avi", 0, True)
0 - отвечает за скрытый режим (для видимости консольного окна выставьте "1")

Закачка-то происходит?

alexmoreman
13-08-2010, 14:20
в том то и дело что не происходит
он через раз ошибку выдает и вот сейчас присоединяет к ссылке -0 (в wget)
Http://share-nn.ru/d/10189263/453382-0
точнее не ноль а букву o
------
dвсё решил. поиграл с пробелами(убрал букву о)
а возможен вариант без нажатия ОК?
-----
блин накаркал, прошло в качалке 3 попытки соединится и прикрывается с окном "команда выполнена! Код возврата: 1"

deepred
13-08-2010, 14:36
alexmoreman,

эти окна нужны только для контроля при тестировании сценария, для того чтобы от них
избавиться нужно закоментировать (поставить символ ' в начале) или удалить строки,
содержащие команды Wscript.Echo.

alexmoreman
13-08-2010, 14:54
deepred,
блин незнаю в чём у меня беда.. убрал я эти строки идет запуск качалки , идут попытки соединиться с сервером то на 3 попытке то на 5 или 7 вырубается wget и все

deepred
13-08-2010, 15:00
alexmoreman,


а при запуске wget из CMD также?

попробуйте применить в коде следующее изменение "cmd /c"

alexmoreman
13-08-2010, 15:17
я решил проверить на другом файле, вроде пошло...
правда соединение прошло с 3 попытки
deepred , а в таком виде можно оставить код?
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False
objIE.Navigate "E:\WGET\111.html"
While objIE.Busy
WScript.Sleep 200
Wend
Set tag = objIE.Document.getElementByid("start_download_form")
Set WshShell = CreateObject("WScript.Shell")
Retval = WshShell.Run ("wget -c -t 0 http://share-nn.ru/" & _
tag.getAttribute("action") &" -O Fail.avi", 1, True)
без последней строки а то с ней ошибка лезет.
а вот ты спросил про CMD? как оно лучше
так:
Retval = WshShell.Run ("wget -c -t 0 http://share-nn.ru/" & _
tag.getAttribute("action") &" -O Fail.avi", 1, True)
или
Retval = WshShell.Run ("cmd /c wget -c -t 0 http://share-nn.ru/" & _
tag.getAttribute("action") &" -O Fail.avi", 1, True)
и вопрос cmd /c cmd это вызов командной, а вот /с это не совсем догнал (путь до качалки?)

deepred
13-08-2010, 15:50
alexmoreman,

Если последний вариант у Вас работает, то можете его оставать, только в верните в конце строчку:
objIE.Quit, internet explorer все-таки следует завершить...

cmd /c - ключ /с применяется для того, чтобы сеанс cmd не завершался по окончанию отработки команды,
я его применил только для наглядности (чтобы увидеть "слет" wget)


PS: а вариант "MSXML2.XMLHTTP" Вы не испытали?

alexmoreman
13-08-2010, 16:04
хорошо щас попробую.
получается к кодом но через раз ошибка вылазает , щас вуду есчё кумекать .

alexmoreman
13-08-2010, 16:35
deepred, гуру я реально туп и непонимаю откуда данный скрипт возьмёт ссылку на файл
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
StrTargetHtml = "Http://sait.ru/" & _
tag.getAttribute("action") & "/" & "Fail.avi"

oXMLHTTP.Open "GET", StrTargetHtml, 0

oXMLHTTP.Send
Set oADOStream = CreateObject("ADODB.Stream")
oADOStream.Mode = 3
oADOStream.Type = 1
oADOStream.Open
oADOStream.Write oXMLHTTP.responseBody
oADOStream.SaveToFile "F:\DL\Fail.avi", 2
WScript.Echo "Закачка завершена"
вообще просто удивительно интересно получается
создал 3 файла:
1. bat
wget -c -t 0 http://share-nn.ru/665552828 -O stranyca.html
start script.vbs
при его запуске скачивается страница и запускается vbs и выдаёт ошибку "строка: 9 символ:1"
запускаю второй bat
2.
start script.vbs
и без ошибки запускается wget и нормально начинается скачивание.
да ещё странность заметил что после запуска появляются характерные щелчки (типа как папка открывается или как страницы в браузере листаеш)
3. vbs
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False
objIE.Navigate "E:\WGET\stranyca.html"
While objIE.Busy
WScript.Sleep 200
Wend
Set tag = objIE.Document.getElementByid("start_download_form")
Set WshShell = CreateObject("WScript.Shell")
Retval = WshShell.Run ("cmd /c wget -c -t 0 http://share-nn.ru/" & _
tag.getAttribute("action") &" -O Video/Film.avi", 1, True)
objIE.Quit
у меня прям загадка а не комп))

deepred
13-08-2010, 17:09
alexmoreman,

в таком виде ему её взять неоткуда (читай внимательней предыдущие посты):

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False
objIE.Navigate "F:\rem\Primer.html"
While objIE.Busy
WScript.Sleep 200
Wend
Set tag = objIE.Document.getElementByid("start_download_form")
WScript.Echo tag.getAttribute("action") ' смотрим то ли?

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
StrTargetHtml = "Http://sait.ru/" & _
tag.getAttribute("action") & "/" & "Fail.avi"

oXMLHTTP.Open "GET", StrTargetHtml, 0

oXMLHTTP.Send
Set oADOStream = CreateObject("ADODB.Stream")
oADOStream.Mode = 3
oADOStream.Type = 1
oADOStream.Open
oADOStream.Write oXMLHTTP.responseBody
oADOStream.SaveToFile "F:\DL\Fail.avi", 2
WScript.Echo "Закачка завершена"
objIE.Quit

deepred
13-08-2010, 17:38
alexmoreman,

Уважаемый!!!! Не надо скачивать страницу, выставьте в мой VBS-скрипт этот inet адрес...

Откуда берется ошибка не знаю, возможно просто не успевает загрузиться страница...
Щелчки и прочее может издавать IE (хотя и не должно такого быть)

и потом: для запуска vbscript следует использовать следующий синтаксис:
wscript //logo script.vbs

alexmoreman
13-08-2010, 17:39
deepred, да я сразу догадался так сделать но увы ошибка...
да бог с ней, слушай а после завершения работы в процессах не должен наверное оставаться iexplore.exe ?

deepred
13-08-2010, 17:42
alexmoreman, alexmoreman,
Если последний вариант у Вас работает, то можете его оставить, только в верните в конце строчку:
Код:
objIE.Quit
, internet explorer все-таки следует завершить... »
Будьте внимательней..




© OSzone.net 2001-2012