Пишем web-бота при помощи twill

on
Пожалуй, редкий программист никогда не задумывался о написании ботов и парсеров сайтов. Что неудивительно. В сети есть множество сайтов с кучей полезного контента, который хочеться утащить или нужные сервисы, которыми хочеться воспользоваться в автоматическом режиме, а кому-то не дает покоя слава google. Зачастую, боты пишут с нуля на php, python и других языках высокого уровня. Программисты вручную формируют HTTP запросы, читают cookie, парсят регулярками страницы, чтобы найти ссылки, веб-формы и т. п. Но зачем? Ведь любой бот по сути делает тоже что и браузер. Зачем каждый раз писать браузер? Вот было бы неплохо получить в свое распоряжение эмулятор браузера, подумал я. Искать долго не пришлось. Такой эмулятор быстро нашелся. Зовут его twill. Сайт: http://twill.idyll.org/ Twill — это библиотека на python, и также интерпретатор языка, который позволяет ходить по сайтам, парзить веб-формы, принимать/отправлять cookies. В общем то что нам нужно. С его помощью можно писать функциональные тесты, ботов и проводить стресс-тестирование по заданному сценарию. Короче, поехали: Сейчас я напишу скрипт позволяющий управлять livejournal из консоли. (На самом деле я просто хотел автоматизировать добавление пользователей в друзья, для раскрутки своего блога) Ставим twill: aptitude install python-twill Интерпретатор twill запускается так. twill-sh Создаем файл jj_login.twill (он будет выполнять авторизацию на livejournal) # ставим юзер агент как у нашего любимого браузера agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" # идем на сайт go www.livejournal.com/ # форма авторизации имеет номер 1. по нему и будем обращаться (чтобы это узнать есть команда showforms) # теперь заполним ее # спрашиваем логин и пароль getinput "login: " # вставляем логин введенный с клавиатуры formvalue 1 user __input__ # спрашиваем пароль getpassword "password: " formvalue 1 password __password__ # ставим галочку "запомнить" formvalue 1 remember_me 1 # сабмитим форму (жмем кнопку "вход") # тут передается не номер формы, а имя кнопки submit _submit # сохраняем куки в файл save_cookies jj_cookies.txt Запускаем скрипт так: twill-sh jj_login.twill Скрипт спросит нас логи и пароль, зайдет на сайт и сохранит cookie в файл jj_cookies.txt, чтобы другой скрипт смог работать уже без авторизации. Далее самое главное: файл jj_command_execute.twill agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" # загружаем куки из файла load_cookies jj_cookies.txt # теперь идем в консоль go www.livejournal.com/admin/console/ # спрашиваем команду у пользователя getinput "command: " # заполняем форму formvalue 1 commands __input__ # нажимаем кнопку submit 3 Запускаем: twill-sh jj_command_execute.twill Чтобы добавить пользователя pupkin в друзья, нужно ввести команду: friend add pupkin или сразу из консоли: echo "friend add pupkin" | twill-sh jj_command_execute.twill Список команд тут: http://www.livejournal.com/admin/console/reference.bml У скрипта есть недостаток: за раз можно передавать только 1 команду, так как в twill нету многострочного ввода. Это поправимо, если использовать twill из python или написать для него расширение. Источник: http://habrahabr.ru/sandbox/19062/
Google Buzz Vkontakte Facebook Twitter Google Bookmarks Digg Закладки Yandex Zakladok.net Reddit delicious БобрДобр.ru Memori.ru МоёМесто.ru

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