2009-08-18 2 views
21

Предположим, мне нужно выполнить набор процедур на конкретном веб-сайте сказать, заполнить некоторые формы, нажать кнопку отправки, отправить данные обратно на сервер, получить ответ, снова сделать что-то на основе ответа и отправить данные обратно к серверу веб-сайта. Я знаю, что в python есть модуль webbrowser, но я хочу сделать это без вызова любого веб-браузера. У него должен быть чистый сценарий.Как автоматизировать просмотр с помощью python?

Есть ли модуль, доступный в python, который может мне помочь?
спасибо

+0

Дубликат: http://stackoverflow.com/search?q=%5Bpython%5D+scraping. Каждый вопрос на скрипинге экрана отвечает на этот вопрос. В частности: http://stackoverflow.com/questions/419260/grabbing-text-from-a-webpage –

+1

Selenium - единственное полное решение этого, насколько я могу судить, и я рассмотрел все варианты такого рода вещей Я могу найти .. если вам просто нужно захватить веб-страницы, тогда механизация будет делать все правильно или сделать базовую запись формы, но для реальной эмуляции браузера вам кажется, что вам нужен селен – Rick

ответ

15

Вы также можете взглянуть на mechanize. Его предназначено для обработки «программный просмотр веб-страниц с программным обеспечением» (согласно их сайту).

+1

mechanize, по моему опыту, довольно медленно, но после https, cookie , логины, это * намного проще, чем urllib2. –

+1

selenium обеспечивает намного больше, чем механизирует, но механизация хороша только для простых вещей, но вызовет проблемы, если вы пытаетесь сделать настоящую эмуляцию браузера, поскольку она не делает такие вещи, как автозагрузка изображений, css-файлы и т. Д. И, кажется, всегда обнаруживается на самых строгих сайтах как автоматизированный инструмент – Rick

+1

К сожалению, механизация больше не поддерживается и не поддерживает Python 3. –

0

Возможно, вы захотите urllib2. Он может обрабатывать такие вещи, как HTTPS, файлы cookie и аутентификацию. Возможно, вам также понадобится BeautifulSoup, чтобы помочь разобрать HTML-страницы.

2

Есть много встроенных модулей python, которые помогут с этим. Например, urllib и htmllib.

Проблема будет проще, если вы измените способ приближения к ней. Вы говорите, что хотите «заполнить некоторые формы, нажать кнопку« Отправить », отправить данные на сервер, получить ответ», который звучит как четырехэтапный процесс.

Фактически, вам необходимо отправить данные на веб-сервер и получить ответ.

Это так же просто, как:

>>> import urllib 
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params) 
>>> print f.read() 

(например, взятые из URLLIB документов).

Что вы делаете с ответом, зависит от того, насколько сложным является HTML и что вы хотите с ним делать. Вы можете избавиться от разбора его с использованием регулярного выражения или двух, или вы можете использовать класс htmllib.HTMLParser, или, может быть, более гибкий парсер более высокого уровня, например Beautiful Soup.

0

Возможно, вы просматриваете эти слайды из last italian pycon (pdf): Автор перечислил большую часть библиотеки для выполнения очищения и автоматического просмотра в python. так что вы можете взглянуть на него.

Мне очень нравится twill (что уже было предложено), который был разработан одним из авторов носа и специально предназначен для тестирования веб-сайтов.

+2

Ссылка на PDF составляет 404. – xApple

0

Internet Explorer специфична, но довольно хорошо:

http://pamie.sourceforge.net/

Преимущество по сравнению с URLLIB/BeautifulSoup является то, что он выполняет Javascript, а так как он использует IE.

16

селеном будет делать именно то, что вы хотите, и она обрабатывает JavaScript

+1

Хотя я не думаю, что это можно сделать без головы, что и есть часто подразумевается «чистым сценарием», это будет максимально точно эмулировать реальный опыт браузера ... поскольку он использует настоящий браузер. Большинство сайтов сегодня полностью разрушены без Javascript, что делает механизирование устаревшим. – Cerin

+1

это неправильно. Вы можете легко подделать браузер с помощью дисплея Pyvirtual для запуска python с селеном в режиме без звука. – Amistad

+0

Существует [http://www.seleniumhq.org/docs/03_webdriver.jsp#htmlunit-driver] (http://www.seleniumhq.org/docs/03_webdriver.jsp#htmlunit-driver). Также см. [Https://github.com/detro/ghostdriver](https://github.com/detro/ghostdriver). Оба они предназначены для javascript. Первая является официальной и второй третьей стороной. –

0

httplib2 + BeautifulSoup

Используйте светлячок + поджигатель + httpreplay, чтобы увидеть, что Javascript проходит и из браузера с веб-сайта.Использование httplib2 вы существенно можете сделать то же самое через почту и получить

2

Selenium2 включает WebDriver, который имеет python bindings и позволяет использовать один обезглавленное драйвер HtmlUnit или переключиться на Firefox или хром для графической отладки.

7

Все ответы стары, я рекомендую, и я большой поклонник requests

с домашней страницы: стандартный модуль urllib2

Пайтона обеспечивает большую часть HTTP возможности, необходимые, но API является полностью сломан. Он был построен для другого времени - и другой сети. Для выполнения простейших задач требуется огромное количество работы (даже переопределение метода) .

Дело не должно быть таким образом. Не в Python.

7

Я думаю, что лучшие решения является сочетание requests и BeautifulSoup, я просто хотел обновить этот вопрос, поэтому он может быть обновляться.

3

Selenium http://www.seleniumhq.org/ - лучшее решение для меня. вы можете закодировать его с помощью языка программирования python, java или любого языка программирования, который вам нравится с легкостью. и легкому имитационному преобразованию в программу.

1

Лучшее решение, которое я нашел (и в настоящее время осуществляет) является: - скрипты в Python с использованием селена WebDriver - PhantomJS обезглавленное браузер (если используется Firefox, вы будете иметь графический интерфейс и будет медленнее)

2

Не забывайте, что является оберткой вокруг mechanize.

zope.testbrowser предоставляет простой в использовании программируемый веб-браузер с особым вниманием к тестированию.

1

Я нашел iMacros Firefox plugin (что бесплатно), чтобы работать очень хорошо.

Он может быть автоматизирован с помощью Python с использованием интерфейсов COM-объектов Windows. Вот пример кода от http://wiki.imacros.net/Python. Она требует Python Windows Extensions:

import win32com.client 
def Hello(): 
    w=win32com.client.Dispatch("imacros") 
    w.iimInit("", 1) 
    w.iimPlay("Demo\\FillForm") 
if __name__=='__main__': 
    Hello() 
+0

Это работает только на машинах Windows? – MikeiLL

+1

Да, насколько я знаю, все, что использует библиотеки win32, работает только в Windows. – twasbrillig

Смежные вопросы