CodeGym /Kursy /Python SELF PL /Praca z zawartością JavaScript

Praca z zawartością JavaScript

Python SELF PL
Poziom 33 , Lekcja 1
Dostępny

1. Wprowadzenie do dynamicznych stron

Jeśli kiedykolwiek próbowałeś/-aś pobierać dane ze stron, które aktualizują zawartość na bieżąco dzięki JavaScript, to wiesz, że to może być niezła zagadka. Ale nie bój się! Jak to mówią, każdy skomplikowany kod można dostosować tak, żeby wyglądał jak magia. Zobaczmy, jak requests_html pozwala nam pracować z taką zawartością.

Jak wiadomo, nie wszystkie strony internetowe są równie użyteczne. Niektóre strony ładują zawartość natychmiast, podczas gdy inne mogą generować lub aktualizować ją dynamicznie za pomocą JavaScript. To może być trudne dla tych, którzy chcą wydobywać dane, ponieważ HTML, który widzisz w narzędziach programistycznych, może różnić się od tego, co otrzymasz przy standardowym zapytaniu.

Problemy pojawiające się przy pobieraniu dynamicznej zawartości

Większość bibliotek do pracy z siecią, takich jak requests, działa tylko z odpowiedziami serwera i nie może uruchamiać JavaScript. Oznacza to, że jeśli zawartość jest ładowana lub zmieniana przez JavaScript, możesz jej w ogóle nie zobaczyć przy standardowym zapytaniu.

2. Używanie biblioteki requests_html

I tutaj na scenę wchodzi requests_html — biblioteka, która łączy w sobie prostotę requests i moc przeglądarki do wykonywania JavaScript. Udostępnia ona podstawowy silnik renderowania, który pozwala wchodzić w interakcję z dynamicznymi stronami internetowymi tak, jakbyś korzystał/-a z prawdziwej przeglądarki.

Instalacja i konfiguracja biblioteki

Aby rozpocząć, zainstalujmy requests_html. Otwórz swój ulubiony terminal i wykonaj następujące polecenie:

Bash
pip install requests-html

Super, biblioteka jest zainstalowana! Teraz możemy z nią pracować.

Podstawy używania requests_html do pobierania zawartości JavaScript

requests_html ułatwia nam życie. Zobaczmy, jak to działa w praktyce. Załóżmy, że mamy stronę, która generuje pewne dane za pomocą JavaScript.

Python

from requests_html import HTMLSession

# Tworzymy sesję HTML
session = HTMLSession()

# Wykonujemy zapytanie do strony
response = session.get('https://example-dynamic-page.com')

# Renderujemy JavaScript
response.html.render()

# Pobieramy dane
data = response.html.find('#dynamic-content', first=True)
print(data.text)

To jest magia! W przeciwieństwie do requests, requests_html udostępnia nam metodę .render(), która pozwala "przewinąć" stronę i uruchomić JavaScript. Gdy strona "ożywa", możesz wydobyć wszystkie potrzebne dane za pomocą selektorów, które już wcześniej omawialiśmy.

3. Przykłady pobierania danych

Teraz zagłębmy się i przyjrzyjmy kilku przykładom, żebyś mógł/-a zobaczyć, jak requests_html pomaga nam w różnych scenariuszach.

Praktyczne pobieranie danych z dynamicznych stron

Wyobraź sobie stronę, która ładuje najnowsze wiadomości dopiero po przewinięciu. Z requests_html możemy symulować zachowanie użytkownika.

Python

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

# Ładujemy stronę
response = session.get(url)

# Renderujemy (czasami trzeba zwiększyć timeout)
response.html.render(timeout=20)

# Znajdujemy elementy z wiadomościami
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

Właśnie w ten sposób łatwo i bezproblemowo uzyskaliśmy dostęp do zawartości, która wcześniej wydawała się niedostępna!

Praca z pobraną zawartością JavaScript za pomocą requests_html

Z pomocą requests_html i selektorów CSS, które omawialiśmy na wcześniejszych wykładach, możesz pracować z zawartością na stronach internetowych tak, jakbyś od lat zajmował/-a się pobieraniem danych!

Python

# Wybieramy pierwszy nagłówek wiadomości
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# Pobieramy link z elementu
link = headline.find('a', first=True).attrs['href']
print(link)

4. Porady i triki

Chociaż requests_html to potężne narzędzie, przy pracy z nim warto pamiętać o kilku rzeczach:

  • Czas oczekiwania i opóźnienia: Pamiętaj, żeby dostosować timeout renderowania dla bardziej złożonych stron. To pomoże uniknąć błędów związanych z wolnym ładowaniem.
  • Moc renderowania: requests_html może zużywać sporo zasobów, bo renderuje JavaScript. Przy dużych ilościach danych lub złożonych stronach może to spowolnić proces.
  • CAPTCHA i zabezpieczenia antybotowe: requests_html nie omija zabezpieczeń antybotowych i CAPTCHA, więc w bardziej skomplikowanych przypadkach lepiej użyć Selenium.
1
Zadanie
Python SELF PL, poziom 33, lekcja 1
Niedostępne
Instalacja i użycie requests_html
Instalacja i użycie requests_html
2
Zadanie
Python SELF PL, poziom 33, lekcja 1
Niedostępne
Wydobycie danych ze strony dynamicznej
Wydobycie danych ze strony dynamicznej
4
Zadanie
Python SELF PL, poziom 33, lekcja 1
Niedostępne
Błędy i optymalizacja renderowania
Błędy i optymalizacja renderowania
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION