Скремблирование сайтов с поддержкой Javascript?

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

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

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

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

Ответы

Ответ 1

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

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

import ghost
g = ghost.Ghost()

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

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

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

Ответ 2

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

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

В основном, что вы делаете, у вас есть библиотека selenium, притворяющаяся, что это браузер Firefox, браузер будет ждать, пока все javascript не загрузится, прежде чем он продолжит передавать вам строку html. Когда у вас есть эта строка, вы можете разобрать ее с помощью beautifulsoup.

Ответ 3

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

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

Я тестировал его, я его в настоящее время использую, и это здорово!

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

Ответ 5

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

Ответ 6

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

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