Очистка веб-сайтов с включенным Javascript? - PullRequest
13 голосов
/ 29 июля 2010

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

Я искал некоторые решения в Google и SO, и был кто-то, кто предложил мне пересмотреть Javascript, но я понятия не имею, как это сделать.

До сих пор я использовал Mechanize, и он работает на сайтах, которые не требуют Javascript.

Есть ли способ получить доступ к веб-сайтам, использующим Javascript, с помощью urllib2 или чего-то подобного? Я также готов изучать Javascript, если это то, что нужно.

Ответы [ 6 ]

8 голосов
/ 01 декабря 2012

Я написал небольшое руководство на эту тему, это может помочь:

http://koaning.io/dynamic-scraping-with-python.html

По сути, у вас есть библиотека селена, притворяющаяся, что это браузер FirefoxБраузер будет ждать, пока весь javascript не загрузится, прежде чем он продолжит передавать вам строку html.Если у вас есть эта строка, вы можете проанализировать ее с помощью Beautifulsoup.

8 голосов
/ 29 июля 2012

Вы должны использовать Ghost , библиотеку Python, которая обертывает хак PyQt4 + WebKit.

Это делает g клиент WebKit:

import ghost
g = ghost.Ghost()

Вы можете получить страницу с помощью g.open(url), и тогда g.content выполнит оценку документа в его текущем состоянии.

У Ghost есть и другие интересные функции, такие как внедрение JS и некоторые методы заполнения форм, и вы можете передатьитоговый документ к BeautifulSoup и так далее: soup = bs4.BeautifulSoup(g.content).

Пока что Ghost - единственное, что я обнаружил, что облегчает подобные вещи в Python.Единственное ограничение, с которым я столкнулся, это то, что вы не можете легко создать более одного экземпляра объекта client, ghost.Ghost, но вы можете обойти это.

7 голосов
/ 29 июля 2010

У меня была точно такая же проблема. Это совсем не просто, но я наконец-то нашел отличное решение, используя PyQt4.QtWebKit.

Вы найдете объяснения на этой веб-странице: http://blog.motane.lu/2009/07/07/downloading-a-pages-content-with-python-and-webkit/

Я протестировал, сейчас использую, и это здорово!

Его большое преимущество в том, что он может работать на сервере, только используя X, без графической среды.

6 голосов
/ 29 июля 2010

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

Надеюсь, что поможет

6 голосов
/ 29 июля 2010

Может быть, вы могли бы использовать Selenium Webdriver , у которого есть привязки Python, я верю. Я думаю, что он в основном используется в качестве инструмента для тестирования веб-сайтов, но я думаю, что он также может быть использован для очистки.

6 голосов
/ 29 июля 2010

Выезд лом . У меня не было никакого опыта с этим, но мне было интересно узнать ответ на ваш вопрос, поэтому я начал гуглить. Я хотел бы знать, сработает ли это для вас.

http://grep.codeconsult.ch/2007/02/24/crowbar-scrape-javascript-generated-pages-via-gecko-and-rest/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...