Moderne nettskraping med BeautifulSoup og Selen

Oversikt

HTML er nesten intuitivt. CSS er et flott fremskritt som skiller mellom strukturen på en side og utseende. JavaScript legger til noe pizazz. Det er teorien. Den virkelige verden er litt annerledes.

I denne opplæringen lærer du hvordan innholdet du ser i nettleseren, faktisk blir gjengitt og hvordan du skal skrape det når det er nødvendig. Spesielt lærer du hvordan du teller Disqus-kommentarer. Våre verktøy vil være Python og fantastiske pakker som forespørsler, BeautifulSoup og Selen.

Når skal du bruke nettskraping?

Nettskraping er praksis for automatisk å hente innholdet på nettsider designet for samhandling med menneskelige brukere, parsing dem og utvinning av noen opplysninger (muligens navigere lenker til andre sider). Det er noen ganger nødvendig hvis det ikke er noen annen måte å trekke ut den nødvendige informasjonen. Ideelt sett gir applikasjonen en dedikert API for å få tilgang til dataene programmatisk. Det er flere grunner at nettskraping bør være din siste utvei:

  • Den er skjøre (nettsidene du skraver kan endres ofte).
  • Det kan være forbudt (noen webapper har retningslinjer mot skraping).
  • Det kan være sakte og ekspansiv (hvis du trenger å hente og vade gjennom mye støy).

Forstå Real-World Web Pages

La oss forstå hva vi står overfor, ved å se på utdataene fra noen vanlige webprogrammer. I artikkelen Introduksjon til Vagrant er det noen Disqus-kommentarer nederst på siden:

For å skrape disse kommentarene må vi finne dem på siden først.

Vis sidekilde

Hver nettleser siden begynnelsen av tiden (1990-tallet) har støttet muligheten til å vise HTML-koden til gjeldende side. Her er en utdrag fra visningskilden Introduksjon til vagrant som starter med en stor del av sertifisert og uglified JavaScript uten tilknytning til selve artikkelen. Her er en liten del av det:

Her er noen HTML fra siden:

Dette ser ganske rotete ut, men det som er overraskende er at du ikke finner Disqus-kommentarene i kilden til siden.

Den Mighty Inline Frame

Det viser seg at siden er en mashup, og Disqus-kommentarene er innebygd som et iframe (inline frame) -element. Du kan finne ut det ved å høyreklikke på kommentarfeltet, og du vil se at det er rammeinformasjon og kilde der:

Det er fornuftig. Inkludering av innhold fra tredjeparter som en iframe er en av de viktigste grunnene til å bruke iframes. La oss finne