Det er flere Python-biblioteker og rammeverk for å trekke ut data fra nettet. Alle starter med et bestemt verktøy til de innser at det kanskje ikke passer best for deres neste prosjekt. Selv om det er svært usannsynlig at du vil bruke alle Python-verktøyene i et enkelt prosjekt, bør du vite hvilke du skal ha tilgjengelig i verktøykassen for nettskraping.
Her er de beste Python-bibliotekene, rammeverket og andre verktøy som vil hjelpe deg å skrape data fra nettet uten problemer.
1. Vakker suppe
Begynner på listen med det beste nettskrapingsbiblioteket for nybegynnere: Vakker suppe. Det er egentlig et verktøy som trekker ut data fra analyserte HTML- og XML-filer ved å transformere dokumentet til et Python-objekt.
"Skjønnheten" til Beautiful Soup ligger i dens enkelhet. Det er enkelt å sette opp og du kan komme i gang med ditt første nettskrapingprosjekt
innen minutter. Beautiful Soup bruker en hierarkisk tilnærming til å trekke ut data fra et HTML-dokument. Du kan trekke ut elementer ved å bruke tagger, klasser, IDer, navn og andre HTML-attributter.Å forvente mer fra Beautiful Soup ville imidlertid være å ta det for langt. Det er ingen innebygd støtte for mellomvare og andre avanserte funksjoner som proxy-rotasjon eller multi-threading. Med Beautiful Soup trenger du biblioteker for å sende HTTP-forespørsler, analysere det nedlastede dokumentet og eksportere den skrapte informasjonen til en utdatafil.
2. forespørsler
requests er utvilsomt det mest brukte Python-biblioteket for å håndtere HTTP-forespørsler. Verktøyet står opp til slagordet: HTTP for Humans™. Den støtter flere typer HTTP-forespørsel, alt fra GET og POST til PATCH og DELETE. Ikke bare dette, du kan kontrollere nesten alle aspekter av en forespørsel, inkludert overskrifter og svar.
Hvis det høres enkelt ut, kan du være trygg da forespørsler også henvender seg til avanserte brukere med dens mange funksjoner. Du kan leke med en forespørsel og tilpasse overskriftene, laste opp en fil til en server ved hjelp av POST, og håndtere blant annet tidsavbrudd, omdirigeringer og økter.
forespørsler er vanligvis assosiert med Beautiful Soup når det kommer til nettskraping ettersom andre Python-rammeverk har innebygd støtte for håndtering av HTTP-forespørsler. For å få HTML-en for en nettside, bruker du forespørsler til å sende en GET-forespørsel til serveren, deretter trekker du ut tekstdataene fra svaret og sender dem videre til Beautiful Soup.
3. Skrapeaktig
Som navnet antyder, er Scrapy et Python-rammeverk for utvikling av store nettskrapere. Det er den sveitsiske hærkniven for å trekke ut data fra nettet. Scrapy håndterer alt fra å sende forespørsler og implementere proxyer til datautvinning og eksport.
I motsetning til Beautiful Soup, er den sanne kraften til Scrapy dens sofistikerte mekanisme. Men ikke la den kompleksiteten skremme deg. Scrapy er det mest effektive rammeverket for nettskraping på denne listen, når det gjelder hastighet, effektivitet og funksjoner. Den leveres med velgere som lar deg velge data fra et HTML-dokument ved hjelp av XPath- eller CSS-elementer.
En ekstra fordel er hastigheten som Scrapy sender forespørsler og trekker ut dataene med. Den sender og behandler forespørsler asynkront, og det er dette som skiller den fra andre verktøy for nettskraping.
Bortsett fra de grunnleggende funksjonene, får du også støtte for mellomvare, som er et rammeverk av kroker som injiserer ekstra funksjonalitet til standard Scrapy-mekanisme. Du kan ikke skrape JavaScript-drevne nettsteder med Scrapy ut av esken, men du kan bruke mellomvare som scrapy-selen, scrapy-splash og scrapy-scrapingbee for å implementere denne funksjonaliteten i prosjektet ditt.
Til slutt, når du er ferdig med å pakke ut dataene, kan du eksportere dem i forskjellige filformater; CSV, JSON og XML, for å nevne noen.
Scrapy er en av mange grunner til at Python er det beste programmeringsspråket for alle som driver med nettskraping. Setter opp ditt første Scrapy-prosjekt kan ta litt tid, spesielt hvis du ikke har erfaring med Python-klasser og -rammeverk. Scrapys arbeidsflyt er segregert i flere filer, og for nybegynnere kan det virke som uønsket kompleksitet.
4. Selen
Hvis du ønsker å skrape dynamisk, JavaScript-gjengitt innhold, er Selen det du trenger. Som et rammeverk for netttesting på tvers av plattformer hjelper Selenium deg med å gjengi HTML, CSS og JavaScript og trekke ut det som kreves. Du kan også etterligne ekte brukerinteraksjoner ved å hardkode tastatur- og mushandlinger, som er en komplett spillskifter.
Selenium skaper en nettleserforekomst ved å bruke nettdriveren og laster inn siden. Noen populære nettlesere som støttes av Selenium er Google Chrome, Mozilla Firefox, Opera, Microsoft Edge, Apple Safari og Internet Explorer. Den bruker CSS- og XPath-lokalisere, som ligner på Scrapy-velgere, for å finne og trekke ut innhold fra HTML-elementer på siden.
Hvis du ikke har erfaring med Python, men kan andre programmeringsspråk, kan du bruke Selenium med C#, JavaScript, PHP, Perl, Ruby og Java.
Den eneste begrensningen er siden Selenium lanserer en nettleser i bakgrunnen, ressursene som kreves for å utføre skraperen øker betydelig, i forhold til Scrapy eller Beautiful Soup. Men gitt tilleggsfunksjonene Selenium bringer til bordet, er det helt berettiget.
5. urllib
Python urllib-biblioteket er et enkelt, men viktig verktøy å ha i nettskrapingarsenalet ditt. Den lar deg håndtere og behandle URL-er i Python-skriptene dine.
En passende praktisk anvendelse av urllib er URL-modifisering. Tenk på at du skraper et nettsted med flere sider og må endre en del av nettadressen for å komme til neste side.
urllib kan hjelpe deg med å analysere URL-en og dele den inn i flere deler, som du deretter kan endre og oppheve for å opprette en ny URL. Selv om det å bruke et bibliotek til å analysere strenger kan virke som en overkill, er urllib en livredder for folk som koder nettskrapere for moro skyld og ikke ønsker å gå inn i de grusomme datastrukturene.
Hvis du vil undersøke et nettsteds robots.txt, som er en tekstfil som inneholder tilgangsregler for Google-søkeroboten og andre skrapere, kan urllib også hjelpe deg med det. Det anbefales at du følger et nettsteds robots.txt og bare skraper de sidene som er tillatt.
6. JSON-, CSV- og XML-biblioteker
Siden Beautiful Soup eller Selenium ikke har innebygde funksjoner for å eksportere dataene, trenger du et Python-bibliotek for å eksportere dataene til en JSON, CSV eller XML-fil. Heldigvis finnes det en mengde biblioteker du kan gjøre for å oppnå dette, og de mest grunnleggende anbefales, nemlig json, csv og xml for henholdsvis JSON-, CSV- og XML-filer.
Slike biblioteker lar deg lage en fil, legge til data til den, og til slutt eksportere filen til din lokale lagring eller ekstern server.
7. Mekanisk suppe
Mekanisk suppe? Er dette en billig vakker suppe-ripoff? Nei. Inspirert av Mekanisere og basert på Python-forespørsler og Beautiful Soup, hjelper MechanicalSoup deg med å automatisere menneskelig atferd og trekke ut data fra en nettside. Du kan vurdere det halvveis mellom vakker suppe og selen. Den eneste fangsten? Den håndterer ikke JavaScript.
Selv om navnene er like, er MechanicalSoups syntaks og arbeidsflyt ekstremt forskjellige. Du lager en nettleserøkt ved hjelp av MechanicalSoup og når siden er lastet ned bruker du Beautiful Soup sine metoder som finne() og finn_alle() for å trekke ut data fra HTML-dokumentet.
En annen imponerende funksjon ved MechanicalSoup er at den lar deg fylle ut skjemaer ved hjelp av et skript. Dette er spesielt nyttig når du trenger å skrive inn noe i et felt (for eksempel en søkelinje) for å komme til siden du vil skrape. MechanicalSoups forespørselshåndtering er fantastisk ettersom den automatisk kan håndtere omdirigeringer og følge lenker på en side, noe som sparer deg for krefter på å manuelt kode en seksjon for å gjøre det.
Siden den er basert på Beautiful Soup, er det en betydelig overlapping i ulempene ved begge disse bibliotekene. For eksempel ingen innebygd metode for å håndtere datautgang, proxy-rotasjon og JavaScript-gjengivelse. Det eneste Beautiful Soup-problemet MechanicalSoup har løst er støtte for håndtering av forespørsler, som er løst ved å kode en innpakning for Python-forespørselsbiblioteket.
Nettskraping i Python gjort enklere
Python er et kraftig programmeringsspråk for å skrape nettet, uten tvil, men verktøyene som brukes er bare en del av problemet. Det mest fremtredende problemet folk møter når de koder en skraper, er å lære HTML-dokumenthierarki.
Å forstå strukturen til en nettside og vite hvordan du finner et element raskt er et must hvis du ønsker å utvikle avanserte nettskrapere.