Как парсить html страничку с JavaScript в python 3?

214
27 ноября 2017, 20:15

Как парсить html страничку с JavaScript в python 3 и что для этого нужно.

Answer 1

Чтобы достать статические данные из html, javascript текста, можно использовать соответствующие парсеры, такие как BeautifulSoup, slimit. Пример: Как, используя Beautuful Soup, искать по ключевому слову?

Чтобы получить информацию с web-странички, которая динамически генерируется, можно web-браузером воспользоваться. Чтобы управлять разными браузерами из Питона, можно selenium webdriver использовать, пример с показом GUI. Чтобы получить html страницу, не показывая GUI, можно «безголовый» (headless) Google Chrome запустить:

from selenium import webdriver  # $ pip install selenium
options = webdriver.ChromeOptions()
options.add_argument('--headless')
# get chromedriver from 
# https://sites.google.com/a/chromium.org/chromedriver/downloads
browser = webdriver.Chrome(chrome_options=options)
browser.get('https://ru.stackoverflow.com/q/749943')
# ... other actions
generated_html = browser.page_source
browser.quit()

Этот интерфейс позволяет автоматизировать действия пользователя (нажатие клавиш, кнопок, поиск элементов на странице по различным критериям, итд). Анализ полезно на две части разбить: загрузить из сети динамически генерируемую информацию с помощью браузера и сохранить её (возможно наличие избыточной информации), а затем детально анализировать уже статическое содержимое, чтобы изъять только необходимые части (возможно без сети в другом процессе с помощью того же BeautifulSoup). К примеру, чтобы найти ссылки на похожие вопросы на сохранённой странице:

from bs4 import BeautifulSoup
soup = BeautifulSoup(generated_html, 'html.parser')
h = soup.find(id='h-related')
related = [a['href'] for a in h.find_all('a', 'question-hyperlink')]

Если сайт предоставляет API (официальное или подсмотренное в сетевых запросах выполняемых javascript), то это может быть более предпочтительным вариантом по сравнению с выдёргиванием информации c UI элементов web-страницы, пример, использования Stack Exchange API.

Часто можно встретить REST API или GraphQL API, которые удобно с помощью requests или специализированных библиотек использовать (по ссылкам пример для github).

READ ALSO
Ошибка при запуске Atom на debian “Couldn't load XPCOM”

Ошибка при запуске Atom на debian “Couldn't load XPCOM”

При запуске Atom на Debian пишет:

153
Safari не видит стили CSS

Safari не видит стили CSS

Браузер Safari почему-то не видит некоторые стили СSS и некторые JSДругие браузеры (Сhrome, FireFox, IE) отображают содержимое корректно

265
Parallax js mouse.

Parallax js mouse.

Подскажите как правильно подключить вот этот скрип http://matthewwagerfield

188
Data tag в javascript?

Data tag в javascript?

Доброго времени суток! Я могу найти текущий день и кинуть его в alert с информациейКак сделать чтобы всё это кинуть в тег???

191