CodeGym /Kursy /Python SELF PL /Ładowanie dynamicznej zawartości za pomocą requests_html

Ładowanie dynamicznej zawartości za pomocą requests_html

Python SELF PL
Poziom 33 , Lekcja 4
Dostępny

1. Dynamiczna zawartość i JavaScript

Jeśli już opanowałeś podstawy web scrapingu przy użyciu bibliotek takich jak BeautifulSoup i requests, czas zanurzyć się w ciekawsze aspekty tego zajęcia. Dziś porozmawiamy o tym, jak można pracować z zawartością, która ładowana jest dynamicznie dopiero podczas przewijania strony. Twój przeglądarka może nie być jedynym fanem nieskończonych list, teraz możesz tego nauczyć także swoje skrypty! 🤖

Internet jest pełen dynamicznie ładowanych stron, gdzie zawartość aktualizuje się i pojawia dopiero po interakcji z JavaScript, który, swoją drogą, „robi magię” po stronie klienta. Może to być zarówno błogosławieństwo, jak i przekleństwo dla osoby zajmującej się web scrapingiem. Z jednej strony takie strony mogą być bardziej interaktywne i przyjazne dla użytkowników, z drugiej – zeskrobywanie takich stron staje się trudniejsze, bo biblioteka requests nie rozumie JavaScript.

2. Biblioteka requests_html

Na szczęście, jak już wiesz, na tym świecie istnieje requests_html — biblioteka, która łączy siłę requests z możliwościami renderowania podobnego do przeglądarki, zapewnianymi przez Pyppeteer. Ta biblioteka pozwala ładować i renderować strony z dynamiczną zawartością, dając możliwość wykonywania JavaScript, a nawet przewijania stron.

Instalacja requests_html

Aby rozpocząć pracę, musisz zainstalować bibliotekę. Jeśli tego jeszcze nie zrobiłeś, wykonaj komendę:

Bash
pip install requests-html

Praca z requests_html

Po zainstalowaniu, przeanalizujmy, jak można używać requests_html do ładowania i pracy z dynamiczną zawartością.

Przykład: Ładowanie i renderowanie strony

Zacznijmy od prostego przypadku: ładowania strony, wykonywania JavaScript i wyodrębniania danych. Rozważmy przykład, w którym ładujemy stronę i otrzymujemy tekst elementu, który pojawia się dopiero po wykonaniu JavaScript.

Python

from requests_html import HTMLSession

# Tworzymy sesję
session = HTMLSession()

# Ładujemy stronę
response = session.get('https://example.com/dynamic-page')

# Wykonujemy JavaScript w celu renderowania strony
response.html.render()

# Wyodrębniamy tekst elementu pojawiającego się po renderowaniu
content = response.html.find('#dynamic-content', first=True)
print(content.text)

W tym przykładzie używamy metody render(), aby pozwolić requests_html wykonać JavaScript na stronie i renderować zawartość, która może być ukryta przed standardowym ładowaniem.

3. Automatyczne przewijanie stron

Czasami dynamiczna zawartość nie ładuje się od razu, lecz pojawia się dopiero podczas przewijania strony. requests_html może pomóc i tutaj, umożliwiając symulację przewijania strony i ładowanie większej ilości danych.

Przykład automatycznego przewijania

Załóżmy, że masz stronę z nieskończoną listą wiadomości i chcesz wyodrębnić jak najwięcej elementów. Oto jak można to zrobić:

Python

from requests_html import HTMLSession

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

# Renderujemy i przewijamy stronę
response.html.render(scrolldown=5, sleep=1)

# Wyodrębniamy wszystkie elementy wiadomości
news_items = response.html.find('.news-item')

for news_item in news_items:
    print(news_item.text)

Tutaj metoda render() została uzupełniona o parametry scrolldown i sleep, które określają, ile razy przewiniemy stronę w dół i jak długo poczekamy między przewinięciami.

4. Praktyczne zastosowanie

Dlaczego w ogóle warto zajmować się czymś takim jak automatyczne przewijanie? 🤔

  • Badania marketingowe: Wiele firm używa takich stron do ciągłego wyświetlania danych, które mogą być przydatne do analizy trendów i zachowań konsumentów.
  • Monitorowanie mediów społecznościowych: Wiele platform społecznościowych używa nieskończonych list, co czyni requests_html przydatnym narzędziem do monitorowania i zbierania danych z takich źródeł.
  • Wiadomości i aktualizacje: Wyodrębnianie nagłówków wiadomości i artykułów z nieskończonych list na stronach informacyjnych pozwala na uzyskanie szybkiej informacji do analizy.

5. Typowe błędy i ich rozwiązania

Podczas pracy z dynamicznymi stronami i requests_html często mogą pojawiać się błędy. Rozważmy kilka najczęstszych:

Problem z renderowaniem

Czasem metoda render() może nie zakończyć się powodzeniem, szczególnie jeśli strona jest zbyt duża lub skomplikowana. W takich przypadkach pomaga zwiększenie czasu renderowania za pomocą parametru timeout, lub zmniejszenie liczby przewinięć.

Python
response.html.render(timeout=30)

Niechciane wykonanie skryptu

Mogą zdarzyć się sytuacje, gdy JavaScript na stronie blokuje wykonanie skryptu lub powoduje problemy. Możesz spróbować użyć parametru wait, aby poczekać na pojawienie się potrzebnych elementów.

Python
response.html.render(wait=2)

Rozdzielczość ekranu i rodzaj urządzenia

Niektóre strony mogą udostępniać zawartość w zależności od rozdzielczości ekranu lub rodzaju urządzenia. Sprawdź, z jakim user-agent wykonywane jest żądanie i jak zawartość jest renderowana.

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. Co jeszcze przeczytać

requests_html — potężne narzędzie, ale aby w pełni wykorzystać jego możliwości i unikać typowych błędów, zapoznaj się z oficjalną dokumentacją. Pomoże ona lepiej zrozumieć, jak można zarządzać przewijaniem i skutecznie renderować skomplikowane strony.

W tym momencie masz już wszystko, co potrzebne, by nie bać się dynamicznej zawartości i nieskończonych list. Uważaj, nie zapomnij zaznaczyć, że Twój skrypt to biały haker, lubiący pomagać ludziom automatyzować ich zadania, a nie złośliwiec! 😇

1
Опрос
Czytanie dynamicznej zawartości,  33 уровень,  4 лекция
недоступен
Czytanie dynamicznej zawartości
Czytanie dynamicznej zawartości
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION