Datauthenting fra JavaScript
Lær å hente data som genereres eller lastes inn av JavaScript, inkludert innhold fra AJAX-kall og enkeltsideapplikasjoner.
Datauthenting fra JavaScript er en gratis leksjon i Nettskraping og boter på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Nettskraping og boter, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Nettskraping og boter inneholder totalt 4 leksjoner.
Dynamisk nettinnhold forklart
Mange moderne nettsteder laster ikke inn alt innholdet på én gang. I stedet bruker de JavaScript til å hente data og oppdatere siden etter at den er lastet inn første gang. Dette kalles dynamisk innhold.
Tradisjonelle verktøy for nettskraping, som Requests og BeautifulSoup, ser bare den opprinnelige HTML-koden. De får ikke med seg noe JavaScript laster inn senere.
JavaScripts rolle ved innlasting
JavaScript kan laste inn nye data på flere måter:
- AJAX-kall: Asynchronous JavaScript and XML. Nettleseren ber om data fra en server i bakgrunnen uten å laste inn hele siden på nytt.
- DOM-manipulering: JavaScript legger direkte til, fjerner eller endrer elementer i sidens struktur (Document Object Model).
- Single-Page Applications (SPA-er): Hele nettsteder som er bygget for å laste inn innhold dynamisk og navigere uten fullstendige sideoppdateringer.
Denne dynamiske innlastingen gjør nettskraping mer komplisert.
Når Requests og BS4 ikke strekker til
Når du bruker Pythons requests-bibliotek, får du den rå HTML-koden som serveren sender i utgangspunktet. Hvis et nettsted deretter bruker JavaScript til å laste inn mer data, finnes ikke disse dataene i HTML-koden du mottok.
BeautifulSoup kan bare analysere HTML-koden den får. Den kan ikke kjøre JavaScript for å hente mer innhold eller vente på at det skal vises.
Selenium for dynamisk innhold
Det er her Selenium blir avgjørende. Selenium styrer en ekte nettleser, for eksempel Chrome eller Firefox, programmatisk.
Når Selenium åpner en side, kjører nettleseren all JavaScript, inkludert AJAX-kall og DOM-manipulering. Det betyr at Selenium ser den ferdig gjengitte siden, akkurat slik en menneskelig bruker ville gjort.
Vent på at elementer skal vises
Siden innhold lastes dynamisk, er det kanskje ikke tilgjengelig med én gang Selenium laster inn siden. Du må be Selenium om å vente til et bestemt element eller en bestemt betingelse er oppfylt, før du prøver å hente ut data.
Hvis du ikke venter, kan skriptet prøve å finne et element før JavaScript har gjengitt det, noe som kan føre til feil eller manglende data.
Bruk eksplisitte ventinger
Seleniums WebDriverWait kombinert med ExpectedConditions (EC) lar deg angi eksplisitte ventinger. Dette ber Selenium vente i maksimalt et bestemt tidsrom, til en bestemt betingelse er sann.
Vanlige betingelser er å vente på at et element skal være synlig, klikkbart eller til stede i DOM-en.
Prøv å kjøre dette eksempelet:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
def main():
driver = webdriver.Chrome()
driver.get("https://www.selenium.dev/selenium/web/dynamic.html")
# Click a button that will make an element appear after a delay
driver.find_element(By.ID, "adder").click()
# Wait up to 10 seconds for the new element to appear
try:
new_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "box0"))
)
print("New element found:", new_element.text)
except Exception as e:
print("Element not found within time limit:", e)
driver.quit()
if __name__ == "__main__":
main()Hent ut gjengitte data
Når du har ventet til det dynamiske innholdet vises, ligner uthentingen av data på hvordan du henter ut statisk innhold ved hjelp av Selenium.
Du kan bruke metoder som find_element(By.ID, "id_name"), find_element(By.CLASS_NAME, "class_name") eller find_element(By.CSS_SELECTOR, "css_selector") for å finne elementene. Deretter kan du hente tekstinnholdet eller attributtene deres.
Kode: Hent dynamisk tekst
Dette eksempelet viser hvordan du venter på et element og deretter henter ut teksten. Tenk deg en side der meldingen «Loading...» endres til faktiske data etter noen sekunder.
Prøv å kjøre dette eksempelet:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
def main():
driver = webdriver.Chrome()
# Using a simple test page that changes content
driver.get("https://www.selenium.dev/selenium/web/dynamic.html")
# Click button to reveal content
driver.find_element(By.ID, "reveal").click()
# Wait for the content to be visible
try:
# The 'revealed' div becomes visible
revealed_div = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "revealed"))
)
print("Revealed content:", revealed_div.text)
except Exception as e:
print("Revealed content not found:", e)
driver.quit()
if __name__ == "__main__":
main()Skraping av single-page-applikasjoner
Single-Page Applications (SPA-er) er nettsteder som laster inn én HTML-side og deretter oppdaterer innholdet dynamisk mens brukeren samhandler med siden. Navigering i en SPA innebærer ofte ikke at hele siden lastes inn på nytt.
Selenium håndterer også SPA-er godt fordi det fungerer som en fullverdig nettleser. Du samhandler med elementer, for eksempel ved å klikke på navigasjonslenker, og Selenium kjører JavaScript-koden og oppdaterer DOM-en. Deretter bruker du de samme teknikkene for venting og uthenting.
Hurtigsjekk om venting
Når du skraper dynamisk innhold som vises etter at siden er lastet inn første gang, hvilken Selenium-teknikk er avgjørende for å sikre at innholdet er tilgjengelig før du prøver å hente det ut?
Oppsummering: Uthenting av dynamiske data
Flott jobbet! Du har lært hvordan du håndterer dynamisk nettinnhold:
- Mange nettsteder bruker JavaScript til AJAX-kall, DOM-manipulering og SPA-er.
- Tradisjonelle verktøy som Requests og BeautifulSoup kan ikke kjøre JavaScript.
- Selenium kan gjengi JavaScript ved å styre en fullverdig nettleser.
- Eksplisitte ventinger er avgjørende for å sikre at dynamisk innlastet innhold er tilgjengelig før uthenting.
Med denne ferdigheten får du tilgang til et stort antall moderne nettsteder i skrapeprosjektene dine!
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Datauthenting fra JavaScript» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Nettskraping og boter, inkludert «Datauthenting fra JavaScript», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Nettskraping og boter inneholder totalt 4 leksjoner.
Hva lærer jeg i «Datauthenting fra JavaScript»?
Lær å hente data som genereres eller lastes inn av JavaScript, inkludert innhold fra AJAX-kall og enkeltsideapplikasjoner. Du øver på Nettskraping og boter med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Nettskraping og boter?
Ingen tidligere erfaring er nødvendig. Nettskraping og boter på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Datauthenting fra JavaScript»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Nettskraping og boter-leksjonen?
Ja. Alle Nettskraping og boter-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Introduksjon til Selenium
- Automatisering av nettleserinteraksjoner
- Datauthenting fra JavaScript
- Ventestrategier for dynamiske sider