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

Веб-скрапинг динамического контента с 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.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий