Сохраняем данные с сайтов

В данной статье опишу вам реализацию одной идеи несколькими способами.

Задание: Требуется пройти по трем URL адресам и сохранить информацию.

Реализация: Будет представлено три варианта реализации — Imacros, Autoit, Bash Linux.
Судите сами какой вариант вам выбрать. Будем заходить последовательно на yandex, google и bing, делать запрос «купить слона» и сохранять результаты выдачи в папку.

Итак, начнем с Imacros.

Yandex

  1. VERSION BUILD=8890130 RECORDER=FX 
  2. TAB T=1 
  3. URL GOTO=about:newtab 
  4. URL GOTO=yandex.ru/ 
  5. EVENTS TYPE=KEYPRESS SELECTOR="#text" CHARS="купить слона" 
  6. EVENT TYPE=KEYPRESS SELECTOR="#text" KEY=13 
  7. SAVEAS TYPE=CPL FOLDER=* FILE=+_{{!NOW:yyyymmdd_hhnnss}}

Google

  1. VERSION BUILD=8890130 RECORDER=FX
  2. TAB T=1
  3. URL GOTO=about:newtab
  4. URL GOTO=www.google.com/
  5. EVENT TYPE=KEYPRESS SELECTOR="#lst-ib" KEY=0
  6. EVENTS TYPE=KEYPRESS SELECTOR="#lst-ib" CHARS="купить слона"
  7. EVENT TYPE=CLICK SELECTOR="#tsf>DIV:nth-of-type(2)" BUTTON=0
  8. EVENT TYPE=CLICK SELECTOR="#tsf>DIV:nth-of-type(2)>DIV:nth-of-type(3)>CENTER>INPUT" BUTTON=0
  9. SAVEAS TYPE=CPL FOLDER=* FILE=+_{{!NOW:yyyymmdd_hhnnss}}

Bing

  1. VERSION BUILD=8890130 RECORDER=FX
  2. TAB T=1
  3. URL GOTO=http://www.bing.com/
  4. TAG POS=1 TYPE=INPUT:SEARCH FORM=ID:sb_form ATTR=ID:sb_form_q CONTENT=купитьслонавкараганде
  5. TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:sb_form ATTR=ID:sb_form_go
  6. SAVEAS TYPE=CPL FOLDER=* FILE=+_{{!NOW:yyyymmdd_hhnnss}}
Для тех, кто «не в теме», Imacros сохраняет данные в папку по-умолчанию. Посмотреть где она или задать новый путь вы можете так, как показано на картинках.

Жмете на кнопку «Опции» на панели Imacros.

Теперь сделаем то же самое в Autoit:

Yandex

  1. #Include <INet.au3>
  2. $HTML = _INetGetSource('http://yandex.ru/yandsearch?lr=13&text=купить+слона')
  3. FileWrite(@ScriptDir & '\yandex-search.html', $HTML)
В первой строке подключаем библиотеку. 
Во второй строке получаем html код страницы. 
В третьей строке сохраняем все в файл yandex-search.html в папку откуда запускаем скрипт.

Google

  1. #Include <INet.au3>
  2. $HTML = _INetGetSource('https://www.google.ru/search?q=купить+слона')
  3. FileWrite(@ScriptDir & '\google-search.html', $HTML)
Тут все то же самое, только другое название файла.

Bing

  1. #Include <INet.au3>
  2. $HTML = _INetGetSource('http://www.bing.com/search?q=%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C%20%D1%81%D0%BB%D0%BE%D0%BD%D0%B0')
  3. FileWrite(@ScriptDir & '\bing-search.html', $HTML)
В данном примере пришлось преобразовать кириллицу в html символы, чтобы Bing «понял» что нам нужно.

Если вы работаете с браузером, то допустимо так делать если, скрипт «затыкается» на кириллице.

Как вы успели заметить, размер скрипта в Autoit намного короче, чем в Imacros. К тому же скрипт Imacros жестко привязан к верстке сайта и при его изменении его надо заново переделывать.

А скрипты для Autoit, приведенные в примере выше, вообще не привязаны к верстке сайта и работают в фоне не мешая браузеру. Скрипт Autoit можно преобразовать в .exe файл и запускать по времени через планировщик в фоновом режиме.

Ну, и в заключении реализуем это в скрипте Bash, работающем в Linux:

Yandex,Google,Bing — 3 в одном файле

  1. #!/bin/bash
  2. sss="http://yandex.ru/yandsearch?lr=13&text=%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C%20%D1%81%D0%BB%D0%BE%D0%BD%D0%B0"
  3. wget -E -nc --load-cookies=cook --save-cookies=cook --keep-session-cookies --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0" $sss
  4. sss="https://www.google.ru/search?q=купить+слона"
  5. wget -E -nc --load-cookies=cook --save-cookies=cook --keep-session-cookies --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0" $sss
  6. sss="http://www.bing.com/search?q=%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C%20%D1%81%D0%BB%D0%BE%D0%BD%D0%B0"
  7. wget -E -nc --load-cookies=cook --save-cookies=cook --keep-session-cookies --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0" $sss
  8. # После этого символа можно комментировать
Скрипт на bash работает без привязки к браузеру. Хотя в коде пришлось эмулировать user-agent и cookies чтобы «обмануть» эти сайты. Также данный скрипт можно запускать по крону (по времени) в фоновом режиме.

Вот что мне потребовалось для реализации этой задачи:
  • На Imacros — windows+mozilla firefox+imacros для firefox
  • На Autoit — windows+autoit
  • На Bash — Любой Linux+wget

Комментарии

Популярные сообщения из этого блога