JavaRush /Курси /Python SELF UA /Завантаження динамічного контенту за допомогою requests_h...

Завантаження динамічного контенту за допомогою requests_html

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

1. Динамічний контент і JavaScript

Якщо ти вже освоїв основи веб-скрейпінгу за допомогою бібліотек, таких як BeautifulSoup і requests, настав час заглибитися у більш цікаві аспекти цього заняття. Сьогодні поговоримо про те, як працювати з контентом, що завантажується динамічно лише під час прокручування сторінки. Твій браузер може бути не єдиним фанатом нескінченних стрічок, тепер цьому можна навчити і свої скрипти! 🤖

Інтернет сповнений сторінок із динамічно завантажуваним контентом, який оновлюється і з'являється тільки при взаємодії з JavaScript, що, у свою чергу, "творить магію" на стороні клієнта. Це може бути як благословенням, так і прокляттям для веб-скрейпера. З одного боку, такі сайти є більш інтерактивними та зручними для користувачів, а з іншого — скрейпінг таких сторінок стає складнішим, тому що бібліотека requests не розуміє JavaScript.

2. Бібліотека requests_html

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

Встановлення requests_html

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

Bash
pip install requests-html

Робота з requests_html

Після встановлення розберемо, як можна використати requests_html для завантаження і роботи з динамічним контентом.

Приклад: Завантаження і рендеринг сторінки

Почнемо з простого випадку: завантаження сторінки, виконання JavaScript і витяг даних. Розглянемо приклад, у якому ми завантажуємо сторінку і отримуємо текст елемента, який з'являється лише після виконання JavaScript.

Python

from requests_html import HTMLSession

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

# Завантажуємо сторінку
response = session.get('https://example.com/dynamic-page')

# Виконуємо JavaScript для рендерингу сторінки
response.html.render()

# Витягуємо текст елемента, який з'являється після рендерингу
content = response.html.find('#dynamic-content', first=True)
print(content.text)

У цьому прикладі ми використовуємо метод render(), щоб дозволити requests_html виконати JavaScript на сторінці та рендерити вміст, який може бути прихований при стандартному завантаженні.

3. Автоматична прокрутка сторінок

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

Приклад автоматичної прокрутки

Припустимо, у тебе є сторінка з нескінченною стрічкою новин, і ти хочеш витягти якомога більше елементів. Ось як це можна зробити:

Python

from requests_html import HTMLSession

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

# Рендеримо і прокручуємо сторінку
response.html.render(scrolldown=5, sleep=1)

# Витягуємо всі елементи новин
news_items = response.html.find('.news-item')

for news_item in news_items:
    print(news_item.text)

Тут метод render() доповнено параметрами scrolldown і sleep, які визначають, скільки разів ми прокрутимо сторінку вниз і як довго чекатимемо між прокрутками.

4. Практичне застосування

Для чого взагалі займатися такою штукою, як автоматична прокрутка? 🤔

  • Маркетингові дослідження: Багато компаній використовують такі сторінки для безперервного виводу даних, які можуть бути корисними для аналізу трендів та поведінки споживачів.
  • Моніторинг соціальних мереж: Багато платформ соціальних мереж використовують нескінченні стрічки, що робить requests_html корисним інструментом для моніторингу і збору даних із таких джерел.
  • Новини і оновлення: Витяг новинних заголовків і статей із нескінченних стрічок новин дозволяє отримати оперативну інформацію для аналізу.

5. Типові помилки і їх вирішення

У процесі роботи з динамічними сторінками і requests_html часто можуть виникати помилки. Розгляньмо кілька поширених:

Проблема з рендерингом

Іноді метод render() може не завершитися успішно, особливо якщо сторінка занадто велика або складна. У таких випадках допомагає збільшення часу рендерингу за допомогою параметра timeout, або зменшення кількості прокруток.

Python
response.html.render(timeout=30)

Паразитне виконання скрипта

Можуть бути ситуації, коли JavaScript на сторінці блокує виконання скрипта або викликає проблеми. Можна спробувати використати параметр wait для очікування появи необхідних елементів.

Python
response.html.render(wait=2)

Роздільна здатність екрану і тип пристрою

Деякі сайти можуть надавати контент залежно від роздільної здатності екрану або типу пристрою. Перевір, із яким user-agent виконується запит і чи рендериться вміст.

Python

response.session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

6. Що ще почитати

requests_html — потужний інструмент, але щоб повністю використати його можливості і уникнути типових помилок, вивчи офіційну документацію. Вона допоможе тобі краще зрозуміти, як можна керувати прокруткою і успішно рендерити складні сторінки.

На цьому етапі ти озброєний усім необхідним, щоб не боятися динамічного контенту і нескінченних стрічок. Будь обережним, не забудь вказувати, що твій скрипт — білий хакер, який любить допомагати людям автоматизувати їх завдання, а не зловмисник! 😇

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ