Python: уроки, справочник и задачи

Библиотека requests-html для парсинга страниц

Раздел: Парсинг на Python · Обновлено 31.10.2026

Библиотека requests-html объединяет загрузку страниц в стиле requests с поиском элементов по CSS-селекторам и XPath, а метод render() выполняет JavaScript для динамических сайтов. В статье показано, как открыть сессию, извлечь данные из списка и таблицы и заполнить веб-форму. Библиотека давно не обновлялась, поэтому для новых проектов стоит сравнить ее со связкой requests и BeautifulSoup или с Playwright.

requests-html
Фото: Amitmarkel / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. 1. Веб-скрапинг с помощью requests-html
  2. Задача 2. Взаимодействие с содержимым с помощью requests-html
  3. 3. Поддержка JavaScript
    1. Примеры использования
    2. Пример: Извлечение названий товаров из динамического списка
    3. Пример: Автоматизация заполнения и отправки веб-формы
    4. Пример: Извлечение данных из таблицы на веб-странице
  4. Заключение

1. Веб-скрапинг с помощью requests-html

Requests-html - это библиотека Python, которая предоставляет удобные инструменты для веб-скрапинга. Веб-скрапинг - это процесс извлечения данных с веб-страниц для их последующего анализа или использования.

Для начала работы с requests-html необходимо импортировать нужный класс:

from requests_html import HTMLSession

Создаем объект сеанса (session) и загружаем страницу:

session = HTMLSession()
response = session.get('https://example.com')

После того как мы получили ответ от сервера, можем использовать различные методы для извлечения информации со страницы, такие как поиск элементов по CSS селекторам, извлечение текста, атрибутов и другое:

# Извлечение текста
titles = response.html.find('h1')
for title in titles:
    print(title.text)
# Получение значения атрибута
link = response.html.find('#link', first=True)
print(link.attrs['href'])

Requests-html позволяет удобно работать с HTML и CSS на веб-страницах, делая процесс веб-скрапинга более эффективным и простым.

Задача 2. Взаимодействие с содержимым с помощью requests-html

После того как мы загрузили страницу, мы можем взаимодействовать с её содержимым. Например, для поиска элементов на странице по CSS селекторам можно использовать метод find():
titles = response.html.find('h1')  # Найти все заголовки h1 на странице
for title in titles:
    print(title.text)

Метод find() возвращает список объектов, представляющих найденные элементы. Мы можем обращаться к тексту элементов, а также к их атрибутам.
Также, requests-html позволяет выполнить JavaScript на странице, что часто бывает полезно при работе с динамическим контентом. Для этого используйте метод render():

response.html.render()

Этот метод запускает браузерное ядро, чтобы обработать JavaScript на странице и обновить DOM. После вызова render(), вы можете извлекать данные из обновленного содержимого страницы.

Requests-html делает процесс веб-скрапинга более удобным и эффективным благодаря своим возможностям работы с HTML, CSS и JavaScript на страницах.

3. Поддержка JavaScript

Одним из преимуществ библиотеки requests-html является поддержка выполнения JavaScript на веб-страницах. Это особенно полезно при скрапинге страниц с динамическим контентом, где данные загружаются или изменяются динамически с использованием JavaScript.

Для выполнения JavaScript на странице используйте метод render():

response.html.render()

При вызове этого метода, requests-html запускает браузерное ядро (при помощи инструмента Pyppeteer), которое интерпретирует и выполняет JavaScript на странице. Это позволяет получить доступ к содержимому, которое может быть изменено или загружено динамически после загрузки страницы.

Примеры использования

  1. Извлечение данных после загрузки через AJAX:
from requests_html import AsyncHTMLSession
# Использование AsyncHTMLSession для асинхронной загрузки страницы
session = AsyncHTMLSession()
response = session.get('https://example.com')
# Ожидание завершения загрузки JavaScript
response.html.render()
# Извлечение информации
data = response.html.find('.dynamic-content')
for item in data:
    print(item.text)
  1. Клик по кнопке для загрузки дополнительного контента:
from requests_html import HTMLSession
session = HTMLSession()
response = session.get('https://example.com')
# Находим кнопку и кликаем по ней
button = response.html.find('#load-more-button', first=True)
button.click()
# Ожидаем загрузки нового контента
response.html.render()
# Извлечение новых данных
new_data = response.html.find('.new-content')
for item in new_data:
    print(item.text)

Благодаря возможности выполнения JavaScript на странице, requests-html предоставляет удобные инструменты для работы с динамическим контентом и обеспечивает более широкие возможности веб-скрапинга.

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

Пример: Извлечение названий товаров из динамического списка

from requests_html import HTMLSession
# Создаем объект сеанса
session = HTMLSession()
# Загружаем страницу с динамическим списком товаров
response = session.get('https://example.com/products')
# Ожидаем загрузки JavaScript и обновления страницы
response.html.render()
# Извлекаем названия товаров из списка
product_names = response.html.find('.product-name')
for product_name in product_names:
    print(product_name.text)
# Можем также получить ссылки на отдельные товары
product_links = [link.attrs['href'] for link in response.html.find('.product-link')]
print(product_links)

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

Пример: Автоматизация заполнения и отправки веб-формы

from requests_html import HTMLSession
# Создаем объект сеанса
session = HTMLSession()
# Загружаем страницу с веб-формой
response = session.get('https://example.com/form')
# Ожидаем загрузки JavaScript и обновления страницы
response.html.render()
# Автоматическое заполнение полей формы
form = response.html.find('form', first=True)
form['username'] = 'john_doe'
form['email'] = 'john_doe@example.com'
form['message'] = 'Hello, this is a test message.'
# Отправка данных формы для обработки
submit_button = form.find('button[type="submit"]', first=True)
response = form.submit(submit=submit_button)
# Проверка успешной отправки формы
if response.status_code == 200:
    print("Форма успешно отправлена!")
else:
    print("Произошла ошибка при отправке формы.")

В данном примере мы загружаем страницу с веб-формой, заполняем поля данными и отправляем форму на сервер для обработки. Здесь requests-html позволяет удобно взаимодействовать с элементами формы на странице и автоматизировать процесс отправки данных.

Такие сценарии могут быть полезны при тестировании веб-приложений, создании скриптов для заполнения форм или автоматической обработки данных на веб-серверах. Requests-html предоставляет удобные инструменты для работы с веб-формами и выполнения подобных задач.

Пример: Извлечение данных из таблицы на веб-странице

from requests_html import HTMLSession
# Создаем объект сеанса
session = HTMLSession()
# Загружаем страницу с таблицей данных
response = session.get('https://example.com/table')
# Ожидаем загрузки JavaScript и обновления страницы
response.html.render()
# Извлечение данных из таблицы
table_rows = response.html.find('tr')  # Находим все строки таблицы
data = []
for row in table_rows:
    cells = row.find('td')  # Находим ячейки в каждой строке
    if cells:
        row_data = [cell.text for cell in cells]
        data.append(row_data)
# Вывод данных таблицы
for row_data in data:
    print(', '.join(row_data))
В данном примере мы загружаем страницу с таблицей данных, извлекаем содержимое строк и столбцов таблицы, а затем выводим эти данные для анализа или дальнейшей обработки. Requests-html позволяет удобно работать с HTML элементами на странице и извлекать нужную информацию.

Заключение

Веб-скрапинг с использованием библиотеки requests-html предоставляет удобные и мощные инструменты для извлечения данных с веб-страниц. Благодаря возможности работы с HTML, CSS и выполнения JavaScript на страницах, requests-html позволяет эффективно собирать информацию даже с динамических и интерактивных веб-ресурсов.

Мы рассмотрели различные примеры использования requests-html, начиная с базовых методов загрузки страниц и поиска элементов, заканчивая более продвинутыми сценариями автоматизации и анализа данных. Надеемся, что представленные примеры помогут вам лучше понять возможности и применение этой библиотеки в вашем проекте.

Не забывайте обращаться к документации requests-html для более подробной информации о методах и функциях, доступных для использования. Успешного скрапинга данных и создания полезных приложений на основе полученной информации!