JavaRush /Курси /Python SELF UA /Робота з JavaScript-контентом

Робота з JavaScript-контентом

Python SELF UA
Рівень 33 , Лекція 1
Відкрита

1. Вступ до динамічних сторінок

Якщо ти коли-небудь намагався скрейпити дані з сайтів, які оновлюють контент на льоту завдяки JavaScript, то знаєш, що це може бути справжньою головоломкою. Але не лякайся! Як кажуть, будь-який складний код можна налаштувати так, щоб він виглядав як магія. Давай розберемося, як requests_html дозволяє нам працювати з таким контентом.

Як відомо, не всі веб-сторінки однаково корисні. Деякі сторінки завантажують контент одразу, в той час як інші можуть генерувати або оновлювати його динамічно за допомогою JavaScript. Це створює певні складнощі для тих, хто хоче отримати дані, оскільки HTML, який ти бачиш за допомогою інструментів для розробників, може відрізнятися від HTML, який ти отримаєш при стандартному запиті.

Проблеми, які виникають при скрейпінгу динамічного контенту

Більшість бібліотек для роботи з вебом, такі як requests, працюють тільки з серверними відповідями і не можуть виконувати JavaScript. Це означає, що якщо контент завантажується або змінюється через JavaScript, ти можеш взагалі його не побачити при стандартному запиті.

2. Використання бібліотеки requests_html

І ось тут виходить на сцену requests_html — бібліотека, яка об'єднує простоту requests і потужність браузера для виконання JavaScript. Вона надає базовий рушій для рендерингу, який дозволяє взаємодіяти з динамічними веб-сторінками так, ніби ти використовуєш справжній браузер.

Встановлення і налаштування бібліотеки

Для початку роботи давай встановимо requests_html. Відкрий свій улюблений термінал і виконай наступну команду:

Bash
pip install requests-html

Чудово, бібліотека встановлена! Тепер ми можемо з нею працювати.

Основи використання requests_html для отримання JavaScript-контенту

requests_html робить наше життя простішим. Давай подивимося, як це працює на практиці. Припустимо, у нас є сторінка, яка генерує деякі дані через JavaScript.

Python

from requests_html import HTMLSession

# Створюємо HTTP-сесію
session = HTMLSession()

# Виконуємо запит до веб-сторінки
response = session.get('https://example-dynamic-page.com')

# Рендеримо JavaScript
response.html.render()

# Отримуємо дані
data = response.html.find('#dynamic-content', first=True)
print(data.text)

Це магія! На відміну від requests, requests_html надає нам метод .render(), який дозволяє "прокрутити" сторінку і виконати JavaScript. Як тільки сторінка "оживає", ти можеш отримати всі необхідні дані, використовуючи селектори, які ми вивчали раніше.

3. Приклади отримання даних

Тепер давай зануримося глибше і розглянемо кілька прикладів, щоб ти міг побачити, як requests_html виручає нас у найрізноманітніших сценаріях.

Практичне отримання даних з динамічних сторінок

Уяви сторінку, яка завантажує останні новини тільки після скролу. З requests_html ми можемо імітувати поведінку користувача.

Python

url = 'https://example-news-site.com'

# Завантажуємо сторінку
response = session.get(url)

# Виконуємо рендеринг з збільшенням таймауту, якщо необхідно
response.html.render(timeout=20)

# Знаходимо елементи з новинами
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

Ось як легко і ненав'язливо ми отримали доступ до контенту, який раніше здавався невловимим!

Робота з завантаженим JavaScript-контентом за допомогою requests_html

За допомогою requests_html і CSS-селекторів, які ми розглядали у попередніх лекціях, ти можеш працювати з контентом на веб-сторінках так, ніби ти вже багато років спеціалізуєшся в скрейпінгу!

Python

# Обираємо перший елемент заголовка новини
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# Отримуємо посилання з елемента
link = headline.find('a', first=True).attrs['href']
print(link)

4. Практичні поради та трюки

Хоча requests_html — потужний інструмент, при роботі з ним варто пам'ятати кілька речей:

  • Таймаути і затримки: Не забувай налаштовувати таймаути рендерингу для більш складних сторінок. Це допоможе уникнути помилок через повільне завантаження.
  • Потужність рендерингу: requests_html може споживати багато ресурсів, оскільки рендерить JavaScript. Для великих обсягів даних або складних сторінок це може уповільнити процес.
  • CAPTCHA та захисти від ботів: requests_html не обходить антибот-захисти та CAPTCHA, тому для більш складних випадків краще використовувати Selenium.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ