Веб-скрапинг с помощью requests-html
Содержание:
- Веб-скрапинг с помощью requests-html
- Взаимодействие с содержимым с помощью requests-html
- Поддержка javascript
- Извлечение данных Ajax
- Клик по кнопке
- Извлечение названий товаров из динамического списка
- Автоматизация заполнения и отправки веб-формы
- Извлечение данных из таблицы на веб-странице
- Заключение
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'])
2.Взаимодействие с содержимым с помощью requests-html
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 на странице. Это позволяет получить доступ к содержимому, которое может быть изменено или загружено динамически после загрузки страницы.
Примеры использования:
- Извлечение данных после загрузки через 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)
- Клик по кнопке для загрузки дополнительного контента:
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, CSS и выполнения JavaScript на страницах, requests-html позволяет эффективно собирать информацию даже с динамических и интерактивных веб-ресурсов.
Мы рассмотрели различные примеры использования requests-html, начиная с базовых методов загрузки страниц и поиска элементов, заканчивая более продвинутыми сценариями автоматизации и анализа данных. Надеемся, что представленные примеры помогут вам лучше понять возможности и применение этой библиотеки в вашем проекте.
Не забывайте обращаться к документации requests-html для более подробной информации о методах и функциях, доступных для использования. Успешного скрапинга данных и создания полезных приложений на основе полученной информации!