Скремблирование сайтов с поддержкой 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, без графической среды.
Ответ 4
Отъезд crowbar. У меня не было никакого опыта, но мне было любопытно ответить на ваш вопрос, поэтому я начал искать работу. Я хотел бы знать, если это сработает для вас.
http://grep.codeconsult.ch/2007/02/24/crowbar-scrape-javascript-generated-pages-via-gecko-and-rest/
Ответ 5
Возможно, вы могли бы использовать Selenium Webdriver, который, я считаю, имеет привязки к python. Я думаю, что в основном это используется как инструмент для тестирования веб-сайтов, но я думаю, что он также может использоваться для очистки.
Ответ 6
Я бы предпочел использовать Selenium. Он в основном предназначен для тестирования веб-приложений с "пользовательской перспективы", но в основном это "FireFox" драйвер. Я на самом деле использовал его для этой цели... хотя я искал динамическую веб-страницу AJAX. Пока форма Javascript имеет узнаваемый "Anchor Text", который Selenium может "click" все должно сортировать себя.
Надеюсь, что поможет