Nettskraping er en av de beste datainnsamlingsmetodene for å samle inn data og bygge tilpassede datasett på toppen av det.

Å ha datasett av høy kvalitet er avgjørende i denne epoken med datadrevet beslutningstaking. Selv om det er mange offentlig tilgjengelige datasett, kan det hende du må bygge tilpassede datasett som oppfyller dine spesifikke behov. Nettskraping lar deg trekke ut data fra nettsteder. Du kan deretter bruke disse dataene til å lage ditt egendefinerte datasett.

Oversikt over datainnsamlingsmetoder

Det finnes ulike datainnsamlingsmetoder. De inkluderer manuell dataregistrering, APIer, offentlige datasett og nettskraping. Hver metode har sine fordeler og begrensninger.

Manuell datainntasting er tidkrevende og utsatt for menneskelige feil, spesielt for datainnsamling i stor skala. Det er imidlertid nyttig for småskala datainnsamling og når data er utilgjengelige på andre måter.

APIer lar utviklere få tilgang til og hente data på en strukturert måte. De gir ofte sanntids eller regelmessig oppdatert informasjon. API-tilgang kan imidlertid være begrenset, kreve autentisering eller ha bruksbegrensninger.

Offentlige datasett dekker et bredt spekter av emner og domener. De er forhåndssamlet og kommer ofte i et strukturert format, noe som gjør dem lett tilgjengelige. De kan spare tid og krefter når de nødvendige dataene stemmer overens med de tilgjengelige datasettene. Imidlertid dekker de kanskje ikke alltid dine spesifikke behov eller er oppdatert.

Nettskraping gir en måte å samle inn data fra nettsteder som ikke tilbyr APIer eller har begrenset tilgang. Det gir mulighet for tilpasning, skalerbarhet og muligheten til å samle data fra flere kilder. Det krever imidlertid programmeringsferdigheter, kunnskap om HTML-struktur og overholdelse av juridiske og etiske retningslinjer.

Velge nettskraping for datainnsamling

Nettskraping lar deg trekke ut informasjon direkte fra nettsider, og gir deg tilgang til et bredt spekter av datakilder. Det gir deg også kontroll over hvilke data du skal trekke ut og hvordan du strukturerer dem. Dette gjør det enkelt å skreddersy skrapeprosessen for å møte dine spesifikke krav og trekke ut den nøyaktige informasjonen du trenger for prosjektet ditt.

Identifisere datakilden

Det første trinnet i nettskraping er å identifisere datakilden. Dette er nettstedet som inneholder dataene du vil skrape. Når du velger datakilden, må du passe på vilkårene for bruk for kilden. Denne artikkelen vil bruke IMDb (Internet Movie Database) som datakilde.

Sette opp miljøet ditt

Sett opp et virtuelt miljø. Kjør deretter følgende kommando for å installere de nødvendige bibliotekene.

pip install forespørsler vakre soup4 pandaer

Du vil bruke forespørsler bibliotek for å lage HTTP-forespørsler. vakker suppe 4 å analysere HTML-innhold og trekke ut data fra nettsider. Til slutt skal du bruke pandaer å manipulere og analysere data.

Den fullstendige kildekoden er tilgjengelig i en GitHub-depot.

Skrive Web Scraping Script

Importer de installerte bibliotekene i skriptet ditt for å kunne bruke funksjonene de tilbyr.

import forespørsler
fra bs4 import Vakker suppe
import tid
import pandaer som pd
import re

De tid og re moduler er en del av Python-standardbiblioteket. Krever derfor ikke separate installasjoner.

tid vil legge til forsinkelser i skrapeprosessen mens re vil forholde seg til vanlig uttrykk.

Du vil bruk vakker suppe til å skrape målnettstedet.

Opprett en funksjon som sender en HTTP GET-forespørsel til mål-URLen. Den skal da hente innholdet i svaret og opprette en Vakker suppe objekt fra HTML-innholdet.

deffå_suppe(url, params=Ingen, overskrifter=Ingen):
respons = requests.get (url, params=params, headers=headers)
suppe = BeautifulSoup (response.content, "html.parser")
komme tilbake suppe

Det neste trinnet er å trekke ut informasjon fra Vakker suppe gjenstand.

For å trekke ut informasjonen trenger du å forstå målnettstedets struktur. Dette innebærer å inspisere HTML-koden til nettstedet. Dette vil hjelpe deg med å identifisere elementene og attributtene som inneholder dataene du vil trekke ut. For å inspisere målnettstedet ditt, åpne koblingen i en nettleser og naviger til nettsiden som inneholder dataene du vil skrape.

Høyreklikk deretter på nettsiden og velg Undersøke fra kontekstmenyen. Dette vil åpne nettleserens utviklerverktøy.

I HTML-koden til nettsiden, se etter elementer som inneholder dataene du vil skrape. Vær oppmerksom på HTML-taggene, -klassene og -attributtene som er knyttet til dataene du trenger. Du vil bruke dem til å lage velgere for å trekke ut dataene ved hjelp av BeautifulSoup. I skjermbildet ovenfor kan du se at tittelen på filmen er inne i lister-item-header klasse. Inspiser hver funksjon du vil trekke ut.

Lag en funksjon som vil trekke ut informasjon fra Vakker suppe gjenstand. I dette tilfellet finner funksjonen tittelen, vurderingen, beskrivelsen, sjangeren, utgivelsesdatoen, regissørene og stjernene til filmen ved å bruke passende HTML-tagger og klasseattributter.

defextract_movie_data(film):
tittel = film.finn("h3", klasse__="lister-item-header").finne("en").tekst
vurdering = movie.find("div", klasse__="rating-imdb-rating").sterk.tekst
beskrivelse = film.finn("div", klasse__="lister-element-innhold").finn_alt("p")[1].text.strip()
genre_element = film.finn("span", klasse__="sjanger")
genre = genre_element.text.strip() hvis sjangerelement ellersIngen
release_date = movie.finn("span", klasse__="lister-element-år tekst-dempet opphevet").text.strip()
director_stars = movie.find("p", klasse__="tekst-dempet").finn_alt("en")
regissører = [person.tekst til person i regissørstjerner[:-1]]
stjerner = [person.tekst til person i regissørstjerner[-1:]]
movie_data = {
"Tittel": tittel,
"Vurdering": vurdering,
"Beskrivelse": beskrivelse,
"Sjanger": sjanger,
"Utgivelsesdato": Utgivelsesdato,
"Regissører": regissører,
"Stjerner": stjerner
}
komme tilbake filmdata

Til slutt, lag en funksjon som vil gjøre selve skrapingen ved å bruke de to ovennevnte funksjonene. Det vil ta året og maksimalt antall filmer du vil skrape.

defscrape_imdb_movies(år, grense):
base_url = " https://www.imdb.com/search/title"
overskrifter = {"Godta-språk": "no-US, en; q=0,9"}
filmer = []
start = 1
samtidig som len (filmer) < limit:
params = {
"Utgivelsesdato": år,
"sortere": "antall_votes, desc",
"start": start
}
suppe = get_suppe (base_url, params=params, headers=headers)
movie_list = soup.find_all("div", klasse__="lister-item mode-advanced")
hvis len (filmliste) == 0:
gå i stykker
til film i filmliste:
movie_data = extract_movie_data (film)
movies.append (movie_data)
hvis len (filmer) >= grense:
gå i stykker
start += 50# IMDb viser 50 filmer per side
tid.søvn(1) # Legg til en forsinkelse for å unngå å overvelde serveren
komme tilbake filmer

Ring deretter def scrape_imdb_movies å gjøre skrapingen.

# Skrap 1000 filmer utgitt i 2023 (eller så mange som tilgjengelig)
filmer = scrape_imdb_movies(2023, 1000)

Du har nå skrapet data.

Det neste trinnet er å lage et datasett fra disse dataene.

Opprette et datasett fra de skrapte dataene

Lag en DataFrame med Pandas fra de skrapte dataene.

df = pd. DataFrame (filmer)

Gjør deretter dataforbehandling og rengjøring. Fjern i dette tilfellet rader med manglende verdier. Trekk deretter ut året fra utgivelsesdatoen og konverter det til numerisk. Fjern unødvendige kolonner. Konverter Vurdering kolonne til numerisk. Til slutt fjerner du ikke-alfabetiske tegn fra Tittel kolonne.

df = df.dropna()
df['Utgivelsesår'] = df['Utgivelsesdato'].str.extract(r'(\d{4})')
df['Utgivelsesår'] = pd.to_numeric (df['Utgivelsesår'],
feil='tvinge').astype('Int64')
df = df.drop(['Utgivelsesdato'], akse=1)
df['Vurdering'] = pd.to_numeric (df['Vurdering'], feil='tvinge')
df['Tittel'] = df['Tittel'].søke om(lambda x: re.sub(r'\W+', ' ', x))

Lagre dataene i en fil for senere bruk i prosjektet ditt.

df.to_csv("imdb_movies_dataset.csv", indeks=Falsk)

Skriv til slutt ut de fem første radene i datasettet for å se hvordan det ser ut.

df.head()

Utgangen er som vist på skjermbildet nedenfor:

Du har nå et datasett hentet gjennom nettskraping.

Nettskraping ved hjelp av andre Python-biblioteker

Beautiful Soup er ikke det eneste Python-biblioteket du kan bruke til nettskraping. Det finnes andre biblioteker der ute. Hver med sine egne fordeler og begrensninger. Undersøk dem for å finne ut hvilken som passer best for din brukssituasjon.