Подтвердить что ты не робот

Scrape html, сгенерированный javascript с помощью python

Мне нужно очистить сайт с помощью python. Я получаю исходный html-код с модулем urlib, но мне нужно также очистить некоторый код html, который генерируется функцией javascript (которая включена в источник html). То, что выполняет эта функция на "сайте", заключается в том, что при нажатии кнопки выводится некоторый код html. Как я могу нажать эту кнопку с помощью кода python? Может ли мне помогать? Я захватил POST-запрос с помощью firebug, но когда я пытаюсь передать его по URL-адресу, я получаю ошибку 403. Любые предложения?

4b9b3361

Ответ 1

В Python, я думаю, Selenium 1.0 - это путь. Его библиотека, которая позволяет вам управлять реальным веб-браузером с вашего языка выбора.

У вас должен быть установлен веб-браузер на компьютере, на котором работает script, но он выглядит как самый надежный способ программного опроса веб-сайтов, которые используют много JavaScript.

Ответ 2

Поскольку здесь нет исчерпывающего ответа, я продолжу и напишу.

Чтобы очистить страницы, обработанные JS, нам понадобится браузер с механизмом JavaScript (e.i, поддержка рендеринга JavaScript)

Параметры вроде Mechanize, url2lib не будут работать, так как они НЕ поддерживают JavaScript.

Итак, что вы делаете:

Настройка PhantomJS для запуска с Selenium. После установки зависимостей для них обоих (см. this), вы можете использовать следующий код в качестве примера для получения полностью рендерингового веб-сайта.

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('http://jokes.cc.com/')
soupFromJokesCC = BeautifulSoup(driver.page_source) #page_source fetches page after rendering is complete
driver.save_screenshot('screen.png') # save a screenshot to disk

driver.quit()

Ответ 3

Я должен был сделать это раньше (в .NET), и вам в основном нужно будет разместить браузер, заставить его нажать кнопку, а затем допросить DOM (модель объекта документа) браузера, чтобы получить сгенерированный HTML.

Это определенно один из недостатков веб-приложений, продвигающихся к подходу Ajax/Javascript к созданию клиентской стороны HTML.

Ответ 5

Для Scrapy (отличная фреймворк python) есть scrapyjs: дополнительный обработчик обработчика/промежуточного обработчика, способный очищать содержимое, сгенерированное javascript.

Он основан на движке webkit на pygtk, python-webkit и python-jswebkit, и это довольно просто.