VBScript: Работа с сайтом VK.com [Часть 02. Сохранение кода страницы в файл] .
В предыдущей части повествования о работе с сайтом VK.com мы научились получать html код страницы по указанному адресу. В качестве адреса мы выбрали "анимешку" открытой группы. Не будем пока делать ввод другого адреса, так как это пока ещё не важно, так как реально результат никак не сохранён, а только часть его показывается/выводится в сообщении.
Таким образом мы пришли к сохранению информации, а это надо конечно для анализа и прочих "волшебных" манипуляций. Не забываем читать книги по этому волшебству, изучаем язык VBScript. ;-)
На данный момент мы пришли к тому, что надо сохранить скаченные данные в файл, это на самом деле не надо будет в итоговом скрипте-"заклинании", но просто необходимо для отладки работы.
"Раз, два, три, четыре, пять - начинаем сохранять." - а ведь это хороший заголовок для данной статьи был бы, но мы, типа программисты, очень скучные и шуток иногда не понимаем, поэтому просто пишем и пишем какой-то текст с латинскими буквами... :-)
Ой, а у Вас не работает код из статьи 01? Прошу простить, только что исправил две строки и уже работает. Вывод на экран кода выполняется этой командой:
- MsgBox q&": The End :"
Ну это только начало текста страницы, не выделяется мышкой, поэтому нельзя скопировать в буфер обмена. А внимательные люди сразу могут увидеть в тексте пугающую строку "Ваш браузер устарел". Нам это пока не важно, исправим после сохранения файла, вот следующая порция кода:
- Set bStrm = createobject("Adodb.Stream")
- with bStrm
- .type = 1 '//binary
- .open
- .write q
- .savetofile "_alls_.htm", 2 '//overwrite
- end with
Просто поверьте, это должно сохранить в файл наши данные. Почему не сохранило? А потому, что у нас в есть небольшие ошибки/неточности в предыдущем коде страницы. Не буду их показывать и объяснять, просто публикую работающий листинг с учетом обхода ошибки устаревания браузера. Вот что мы имеем:
<code>
- On Error Resume Next 'маскируем ошибки, если есть, то скрипт продолжит работу, напишите спереди команду "Rem " и проверьте на ошибки
- url = "https://vk.com/video-146954363_456239568?list=e28287d47241c04b6b" 'Начнём с такого видео, называется "Коллекция Коллекция Джунджи Ито ...". Получаем ссылку нажав на видео правой кнопкой мышки, заметим, что это сериал, так как есть в ссылке слово "?list", и это ссылка на какой-то сезон.
- Set r = CreateObject("Msxml2.XMLHttp.6.0") 'готовимся к скачиванию
- r.open "GET", url&"?", False 'подготавливаем заголовок запроса к сайту
- r.setRequestHeader "Host", "vk.com" 'сайт, ой, нет, домен нашего сайта
- r.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 'а это мы говорим сайту, что мы как бы браузер Опера, иначе прилетит очень вероятный ответ, что браузер устарел
- r.send 'запрос ушел
- If r.Status = 200 Then 'на самом деле тут пауза до получения ответа
- q = r.getAllResponseHeaders 'по идее мы получаем ответ с необходимой информацией о страничке и о сайте
- End If 'да, нет обработки ошибок, считаем что сеть работает и сайт доступен, но надо всё-таки доделать, верно? :-)
- r.open "GET", url&"?", False 'вот очень важный момент, надо обязательно добавить к url вопросительный знак
- r.setRequestHeader "Host", "vk.com" 'сайт, ой, нет, домен нашего сайта
- r.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" 'а это мы говорим сайту, что мы как бы браузер Опера, иначе прилетит очень вероятный ответ, что браузер устарел
- r.send 'отсылаем новый запрос, должна прилететь страничка "правильная"
- 'Вот тут на самом деле скажу самое интересное, а если Вы зарегистрированы в VK и имеете доступ в сообщество (закрытое даже), то получите то, что надо для парсинга.
- If r.Status = 200 Then
- q = r.responseBody
- End If
- Set r = Nothing
- Set bStrm = createobject("Adodb.Stream")
- with bStrm
- .type = 1
- .open
- .write q
- .savetofile "_alls_.htm", 2
- end with
- MsgBox ": The End. :":Wscript.Quit 'Для отладки прерываем работу
</code>
У меня получилось чуть меньше 400 килобайт сохранить данных в файл с именем "_alls_.htm". Вряд ли должно отличаться у Вас, почему "вряд ли"? Ну бывает всякое, может файл всё-таки не для публичного доступа или ссылка закрытого сообщества, а может и ещё что-то не то произошло.
Будем считать, что всё получилось, но Вы пишите в комментариях если есть проблемы или заметили ошибки, заранее благодарен.
Удачи!
Следующий шаг imho будет из самых "нудных", мы начнём"парсить" страницу.