Документация по Python. Теоретические материалы, и практические задачи

requests-html

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

Содержание:

  1. Веб-скрапинг с помощью requests-html
  2. Взаимодействие с содержимым с помощью requests-html
  3. Поддержка javascript
  4. Извлечение данных Ajax
  5. Клик по кнопке
  6. Извлечение названий товаров из динамического списка
  7. Автоматизация заполнения и отправки веб-формы
  8. Извлечение данных из таблицы на веб-странице
  9. Заключение

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():

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

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

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

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

Для выполнения JavaScript на странице используйте метод 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 для более подробной информации о методах и функциях, доступных для использования. Успешного скрапинга данных и создания полезных приложений на основе полученной информации!

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

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