Найти тему
Виктор Шугаров

VBScript: Работа с сайтом VK.com [Часть 02. Сохранение кода страницы в файл].

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 будет из самых "нудных", мы начнём"парсить" страницу.