← Архив: Common Lisp

Web scraping?

Author: · 09.08.2013 19:19
· original author: lisomort
На днях занялся попыткой создания небольшого бота для работы с нужным мне сайтом. Необходимо чтобы бот проверял в указанное время сайт и сгружал оттуда информацию. Это как бы обычный веб-скрап. А если нужно чтобы бот еще и некоторые формочки попутно заполнил и кнопочку нажал, что делать? И ессно вопрос, в какую сторону смотреть если язык для реализации - CommonLisp?
· original author: Menschenkindlein
А почему именно формочки? Разве нельзя запрос вручную послать?
Вот берем форму
<form action="target" method="post"> <input type="textarea" name="text" /> <input type="submit" /> </form>
и делаем для нее запрос
(drakma:http-request "target"
                     :method :post
                     :parameters '(("text" . "Your text"))
)

По-моему, логично.
· original author: motopeh
http://www.cliki.net/HTTP%20client
· original author: lisomort
Спасибо за ссылку, работа пошла, ииии резко остановилась. Необходима авторизация на сайте. Для теста попробовал на паре-тройке левых сайтов - все прошло на ура. На нужном мне сайте - 403 Forbidden. Форма для авторизации вот такая.
<-h4>Авторизация<-/h4> <-form id="login_form" action="/login/" method="post"> <-input type="image" style="width:0px;height:0px;border:0px;" alt="" title="" src="/i/empty.gif" /> <-input type="hidden" name="action" value="login" /> <-table cellspacing="3" cellpadding="0" border="0"> <-tr> <-td> E-mail:  <-/td> <-td> <-input type="text" name="login" class="sm" /> <-/td> <-/tr> <-tr> <-td> Пароль:  <-/td> <-td> <-input type="password" name="pwd" class="sm"/> <-/td> <-/tr> <-tr> <-td>   <-/td> <-td> HTTP | <-a title="Безопасное<-br/>подключение" href="https://advego.ru/login">HTTPS<-/a> <-/td> <-/tr> <-tr> <-td>   <-/td> <-td> <-a href="/password">Забыли пароль?<-/a> <-/td> <-/tr> <-tr> <-td>   <-/td> <-td class="vmiddle"> <-span title="Небезопасно!"><-input title="Небезопасно!" type="checkbox" name="remember"/> запомнить<-/span> <-/td> <-/tr> <-tr><-td> <-/td><-td> <-/td><-/tr> <-tr> <-td>   <-/td> <-td> <-input type="hidden" name="action" value="login" /> <-input type="hidden" name="uri" value="" /> <-input type="hidden" name="captcha" value="tmp_value" /> <-div class="midmenu"> <-a id="login_submit" href="/login/">Войти<-/a> <-/div> <-/td> <-/tr> <-/table> <-/form>
Сабмит формы идет не через <input....> может быть в этом дело?
Вот код для авторизации:
(let ((cookie-jar (make-instance 'drakma:cookie-jar)))
    (drakma:http-request "http://www.site.com/"
                         :method :post
                         :parameters `(("login" . "myemail@mail.com") ("pwd" . "mypassword"))
                         :cookie-jar cookie-jar
)

    (drakma:http-request "http://www.site.com/"
                         :cookie-jar cookie-jar
)
)
· original author: motopeh
Постишь не туда. http://htmlbook.ru/html/form/action
· original author: motopeh
Наверно следующей проблемой будет капча, которая от твоих методов и создавалась.
· original author: lisomort
"Постишь не туда. http://htmlbook.ru/html/form/action"
не-не, то я в пример не так вставил )
(let ((cookie-jar (make-instance 'drakma:cookie-jar)))
    (drakma:http-request "http://www.site.com/login/"
                         :method :post
                         :parameters `(("login" . "myemail@mail.com") ("pwd" . "mypassword"))
                         :cookie-jar cookie-jar
)

    (drakma:http-request "http://www.site.com/"
                         :cookie-jar cookie-jar
)
)


А что там с капчей? 0_о
· original author: Menschenkindlein
Капчи действительно с первого раза не видно, возможно, она высвечивается лишь при ошибочном вводе пароля.
Для начала, я бы попробовал данные всех input без исключения послать. Например, вот этого:
<-input type="hidden" name="action" value="login" />
· original author: lisomort
мысль насчет высылки собирать данные со всех <input>`ов меня посещала. Пробовал - не сработало.
З.Ы. попробовал использовать Python фреймворк для скрапинга Scrapy. Используя стандартный метод для авторизации, он заходит на сайт без проблем. Передаются там только логин и пароль.
· original author: Menschenkindlein
Кстати, а на каком из запросов 403?
· original author: andy128k
В зависимости от паранойи разработчика/администратора могут учитываться User-Agent и Referrer.