ВебмастерскаяСекреты вебмастера

Веб-скрапинг динамического контента с Selenium и Python

Веб-скрапинг динамического контента с Selenium и Python

Здравствуйте. В сегодняшней статье мы рассмотрим, как парсить некоторые динамические сайты при помощи Python и библиотеки Selenium. Многие современные сайты генерируют контент динамически или же имеют значения изменяющиеся в зависимости от условий. Парсинг подобных сайтов с помощью библиотеки bs4 может вызвать множестов проблем. Один из подходов заключается в том, чтобы имитировать взаимодействие пользователя на веб-сайте, прежде чем использовать bs4 для анализа интересующих вас элементов.

Ниже приведен рабочий пример получения динамического контента с помощью Selenium. Он предназначен только для иллюстративных целей.


from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from  selenium import webdriver
import lxml
import time

link = r'https://www.cryptocompare.com/'
browser = webdriver.Chrome()
browser.get(link)

try:

    WebDriverWait(browser, 10).until(EC.presence_of_element_located(
        (By.CLASS_NAME, "panel-body")))
    crypt_elements = browser.find_element(By.CLASS_NAME, 'table-coins')

    prices_html = BeautifulSoup(crypt_elements.get_attribute(
        'innerHTML'), features='lxml').prettify()

    # Затем вы можете разобрать price_html

    # Вывод результата
    print(prices_html)

    # Запишем разметку в html файл
    with open("coins.html","w") as f:
        print(prices_html, file=f)

# Базовый try catch для проверки ошибок.    
except Exception as e:
    print(e)

finally:

    time.sleep(2)
    # закрываем браузер после всех манипуляций
    browser.quit()

Здесь .get_attribute('innerHTML') используется для получения HTML выбранного элемента. Идея состоит в том, чтобы дождаться загрузки элементов браузером, найти интересующие вас элементы, а затем разобрать их через bs4 для получения окончательного результата.

Приведенный выше код извлекает цены один раз. Чтобы непрерывно получать цены, вы можете передать их через рекурсивный цикл.

Таким образом, мы попытались обработать динамический контент при помощи Selenium и bs4.

Источник

Статьи по теме

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Back to top button