очистить HTML, сгенерированный JavaScript с Python - PullRequest
17 голосов
/ 27 января 2010

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

Ответы [ 5 ]

10 голосов
/ 11 марта 2011

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

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

9 голосов
/ 29 марта 2016

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

Чтобы соскрести JS-страницы, нам понадобится браузер с движком JavaScript (например, поддержка рендеринга JavaScript)

Такие параметры, как Механизация , url2lib не будут работать, поскольку они НЕ поддерживают JavaScript.

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

Настройка PhantomJS для работы с Селен . После установки зависимостей для них обоих (см. 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()
4 голосов
/ 27 января 2010

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

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

3 голосов
/ 03 декабря 2011

Я использую webkit, который является браузером для Chrome и Safari. Существует привязок Python к webkit через Qt . А вот полный пример для выполнения JavaScript и извлечения окончательного HTML .

2 голосов
/ 07 ноября 2013

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

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

...