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

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

Задание: Требуется пройти по трем URL адресам и сохранить информацию.
Реализация: Будет представлено три варианта реализации — Imacros, Autoit, Bash Linux.

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

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

Yandex

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

Google

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

Bing

VERSION BUILD=8890130 RECORDER=FX
 TAB T=1
 URL GOTO=http://www.bing.com/
 TAG POS=1 TYPE=INPUT:SEARCH FORM=ID:sb_form ATTR=ID:sb_form_q CONTENT=купитьслонавкараганде
 TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:sb_form ATTR=ID:sb_form_go
 SAVEAS TYPE=CPL FOLDER=* FILE=+_{{!NOW:yyyymmdd_hhnnss}}

Для тех, кто «не в теме», Imacros сохраняет данные в папку по-умолчанию. Посмотреть где она или задать новый путь вы можете так, как показано на картинках.

1) Жмете на кнопку “Опции” на панели Imacros.
 опции Imacros
2) Выбираете вкладку “Path” – там и будет указан ваш путь до папки сохранения.
пути к папке загрузки
Теперь сделаем то же самое в Autoit:
Yandex
#Include <INet.au3>
$HTML = _INetGetSource('http://yandex.ru/yandsearch?lr=13&text=купить+слона')
FileWrite(@ScriptDir & '\yandex-search.html', $HTML)

В первой строке подключаем библиотеку. Во второй строке получаем html код страницы. В третьей строке сохраняем все в файл yandex-search.html в папку откуда запускаем скрипт.

Google

#Include <INet.au3>
$HTML = _INetGetSource('https://www.google.ru/search?q=купить+слона')
FileWrite(@ScriptDir & '\google-search.html', $HTML)

Тут все то же самое, только другое название файла.

Bing

#Include <INet.au3>
$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')
FileWrite(@ScriptDir & '\bing-search.html', $HTML)

В данном примере пришлось преобразовать кириллицу в html символы, чтобы Bing “понял” что нам нужно.

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

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

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

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

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

#!/bin/bash
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"
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
sss="https://www.google.ru/search?q=купить+слона"
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
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"
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
# После этого символа можно комментировать

Скрипт на bash работает без привязки к браузеру. Хотя в коде пришлось эмулировать user-agent и cookies чтобы “обмануть” эти сайты. Также данный скрипт можно запускать по крону (по времени) в фоновом режиме.

Вот что мне потребовалось для реализации этой задачи:

  • На Imacros – windows+mozilla firefox+imacros для firefox
  • На Autoit – windows+autoit
  • На Bash – Любой Linux+wget

2 thoughts on “Сохраняем данные с сайтов

  1. Приветствую ! Не мог бы ты ответить на такой вопрос:
    Нужно спарсить фоловеров твитер-акка (любого)
    Делаю так :
    SET !ERRORIGNORE YES
    ‘URL GOTO=https://mobile.twitter.com/OllyMolander/followers
    TAG POS={{!LOOP}} TYPE=SPAN ATTR=CLASS:username EXTRACT=TXT
    ‘PROMPT {{!EXTRACT}}
    SAVEAS TYPE=EXTRACT FOLDER=* FILE=usertwit.txt
    Но натыкаюсь на проблему в том что выдается только 20-ть результатов на страницу ( нужно работать только с мобильным юзер агентом ,допустим Android , для того что бы была кнопка “Показать больше” )
    Так нажимаю на кнопку:
    EVENT TYPE=CLICK SELECTOR=”#main_content>DIV>DIV:nth-of-type(2)>DIV>A” BUTTON=0

    Как же так сделать что бы собрать 20-ть фоловеров и потом нажать на кнопку , и так по кругу ?
    Заранее благодарен за ответ !
    PS: Не хватает на блоге опции подписаться на комментарии !

  2. Задать нужный юзер агент в браузере можно поставив плагин RDS Bar. Для парсинга фолловеров я бы использовал более подходящий инструмент – программу Twidium. Она хоть и условно – бесплатная, но может полноценно работать в течении недели. Есть еще виртуальные машины, где можно ее поставить и использовать без вреда для реестра.
    Imacros с Twitter всегда работал достаточно коряво, так как эта социальная сеть кишит ботами, и там всячески с ними борются. Чтобы повторить какие-то действия в скрипте, впишите эти строки туда столько раз, сколько нужно. Если код для повтора слишком большой, оформите эти строки в отдельный скрипт и вызывайте его из текущего сколько нужно раз.
    Плагин подписки стоит, но почему-то перестал работать, теперь ищу другой. Спасибо, что сообщили.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *