Webskrabning er en af de bedste dataindsamlingsmetoder til at indsamle data og bygge brugerdefinerede datasæt oven på det.
At have datasæt af høj kvalitet er afgørende i denne æra med datadrevet beslutningstagning. Selvom der er adskillige offentligt tilgængelige datasæt, kan du nogle gange være nødt til at bygge brugerdefinerede datasæt, der opfylder dine specifikke behov. Web-skrabning giver dig mulighed for at udtrække data fra websteder. Du kan derefter bruge disse data til at oprette dit brugerdefinerede datasæt.
Oversigt over dataindsamlingsmetoder
Der er forskellige dataindsamlingsmetoder. De omfatter manuel dataindtastning, API'er, offentlige datasæt og web-skrabning. Hver metode har sine fordele og begrænsninger.
Manuel indtastning af data er tidskrævende og tilbøjelig til menneskelige fejl, især for storstilet dataindsamling. Det er dog nyttigt til dataindsamling i lille målestok, og når data er utilgængelige på andre måder.
API'er giver udviklere mulighed for at få adgang til og hente data på en struktureret måde. De giver ofte oplysninger i realtid eller regelmæssigt opdateret. API-adgang kan dog være begrænset, kræve godkendelse eller have brugsbegrænsninger.
Offentlige datasæt dækker en bred vifte af emner og domæner. De er samlet på forhånd og kommer ofte i et struktureret format, hvilket gør dem let tilgængelige. De kan spare tid og kræfter, når de nødvendige data stemmer overens med de tilgængelige datasæt. Men de dækker måske ikke altid dine specifikke behov eller er opdaterede.
Webskrabning giver mulighed for at indsamle data fra websteder, der ikke tilbyder API'er eller har begrænset adgang. Det giver mulighed for tilpasning, skalerbarhed og muligheden for at indsamle data fra flere kilder. Det kræver dog programmeringsfærdigheder, viden om HTML-struktur og overholdelse af juridiske og etiske retningslinjer.
Valg af webskrabning til dataindsamling
Web-skrabning giver dig mulighed for at udtrække information direkte fra websider, hvilket giver dig adgang til en bred vifte af datakilder. Det giver dig også kontrol over, hvilke data du skal udtrække, og hvordan du strukturerer dem. Dette gør det nemt at skræddersy skrabeprocessen til at opfylde dine specifikke krav og udtrække den præcise information, du har brug for til dit projekt.
Identifikation af datakilden
Det første trin i web-skrabning er at identificere datakilden. Dette er webstedet, der indeholder de data, du vil skrabe. Når du vælger datakilden, skal du sørge for at tilpasse dig kildens servicevilkår. Denne artikel vil bruge IMDb (Internet Movie Database) som datakilde.
Opsætning af dit miljø
Konfigurer et virtuelt miljø. Kør derefter følgende kommando for at installere de nødvendige biblioteker.
pip installation anmoder om beautifulsoup4 pandaer
Du vil bruge anmodninger bibliotek til at lave HTTP-anmodninger. smuk suppe 4 at parse HTML-indhold og udtrække data fra websider. Til sidst vil du bruge pandaer at manipulere og analysere data.
Den fulde kildekode er tilgængelig i en GitHub-depot.
Skrivning af Web Scraping Script
Importer de installerede biblioteker i dit script for at kunne bruge de funktioner, de tilbyder.
importere anmodninger
fra bs4 importere Smuk suppe
importere tid
importere pandaer som pd
importere vedr
Det tid og vedr moduler er en del af Python-standardbiblioteket. Kræver derfor ikke separate installationer.
tid vil tilføje forsinkelser til skrabeprocessen, mens vedr vil beskæftige sig med regulære udtryk.
Du vil brug Smuk suppe til at skrabe målwebstedet.
Opret en funktion, der sender en HTTP GET-anmodning til din mål-URL. Den skal så hente indholdet af svaret og opretter en Smuk suppe objekt fra HTML-indholdet.
deffå_suppe(url, params=Ingen, overskrifter=Ingen):
respons = requests.get (url, params=params, headers=headers)
suppe = Smuksuppe (response.content, "html.parser")
Vend tilbage suppe
Det næste trin er at udtrække information fra Smuk suppe objekt.
For at udtrække de oplysninger, du har brug for at forstå din målwebsidestruktur. Dette indebærer inspektion af hjemmesidens HTML-kode. Dette vil hjælpe dig med at identificere de elementer og attributter, der indeholder de data, du vil udtrække. For at inspicere dit målwebsted skal du åbne dets link i en webbrowser og navigere til den webside, der indeholder de data, du vil skrabe.
Højreklik derefter på websiden og vælg Inspicere fra kontekstmenuen. Dette åbner browserens udviklerværktøjer.
I HTML-koden på websiden skal du se efter elementer, der indeholder de data, du vil skrabe. Vær opmærksom på HTML-tags, klasser og attributter, der er knyttet til de data, du har brug for. Du vil bruge dem til at oprette vælgere til at udtrække dataene ved hjælp af BeautifulSoup. På skærmbilledet ovenfor kan du se, at filmens titel er inde i lister-item-header klasse. Undersøg hver funktion, du vil udtrække.
Opret en funktion, der vil udtrække information fra Smuk suppe objekt. I dette tilfælde finder funktionen filmens titel, vurdering, beskrivelse, genre, udgivelsesdato, instruktører og stjerner ved hjælp af passende HTML-tags og klasseattributter.
defudtræk_filmdata(film):
title = movie.find("h3", klasse__="lister-item-header").Find("en").tekst
rating = movie.find("div", klasse__="rating-imdb-rating").stærk.tekst
beskrivelse = film.find("div", klasse__="lister-item-content").find_alle("p")[1].text.strip()
genre_element = film.find("span", klasse__="genre")
genre = genre_element.text.strip() hvis genre_element andetIngen
release_date = movie.find("span", klasse__="lister-item-year text-muted unbold").text.strip()
director_stars = movie.find("p", klasse__="tekst-dæmpet").find_alle("en")
direktører = [person.tekst til person i instruktørstjerner[:-1]]
stjerner = [person.tekst til person i instruktørstjerner[-1:]]
movie_data = {
"Titel": titel,
"Bedømmelse": bedømmelse,
"Beskrivelse": beskrivelse,
"Genre": genre,
"Udgivelses dato": udgivelses dato,
"instruktører": direktører,
"Stjerner": stjerner
}
Vend tilbage film_data
Til sidst skal du oprette en funktion, der vil udføre selve skrabningen ved hjælp af de to ovenstående funktioner. Det vil tage det år og det maksimale antal film, du vil skrabe.
defscrape_imdb_movies(år, grænse):
base_url = " https://www.imdb.com/search/title"
overskrifter = {"Accepter-sprog": "da-US, da; q=0,9"}
film = []
start = 1
mens len (film) < grænse:
params = {
"udgivelses dato": år,
"sortere": "antal_stemmer, desc",
"Start": Start
}
suppe = get_suppe (base_url, params=params, headers=headers)
movie_list = soup.find_all("div", klasse__="lister-item mode-avanceret")
hvis len (filmliste) == 0:
pause
til film i filmliste:
movie_data = extract_movie_data (film)
movies.append (movie_data)
hvis len (film) >= grænse:
pause
start += 50# IMDb viser 50 film pr. side
tid.søvn(1) # Tilføj en forsinkelse for at undgå at overvælde serveren
Vend tilbage film
Så ring til def scrape_imdb_movies at lave skrabningen.
# Skrab 1000 film udgivet i 2023 (eller så mange som tilgængelige)
film = scrape_imdb_movies(2023, 1000)
Du har nu skrabet data.
Det næste trin er at oprette et datasæt ud fra disse data.
Oprettelse af et datasæt fra de skrabet data
Opret en DataFrame ved hjælp af Pandas fra de skrabet data.
df = pd. DataFrame (film)
Foretag derefter dataforbehandling og -rensning. I dette tilfælde skal du fjerne rækker med manglende værdier. Udtræk derefter året fra udgivelsesdatoen og konverter det til numerisk. Fjern unødvendige kolonner. Konverter Bedømmelse kolonne til numerisk. Fjern endelig ikke-alfabetiske tegn fra Titel kolonne.
df = df.dropna()
df['Udgivelsesår'] = df['Udgivelses dato'].str.extract(r'(\d{4})')
df['Udgivelsesår'] = pd.to_numeric (df['Udgivelsesår'],
fejl ='tvinge').astype('Int64')
df = df.drop(['Udgivelses dato'], akse=1)
df['Bedømmelse'] = pd.to_numeric (df['Bedømmelse'], fejl='tvinge')
df['Titel'] = df['Titel'].ansøge(lambda x: re.sub(r'\W+', ' ', x))
Gem dataene i en fil til senere brug i dit projekt.
df.to_csv("imdb_movies_dataset.csv", indeks=Falsk)
Udskriv til sidst de første fem rækker af dit datasæt for at få et overblik over, hvordan det ser ud.
df.head()
Outputtet er som vist på skærmbilledet nedenfor:
Du har nu et datasæt opnået gennem web-skrabning.
Webskrabning ved hjælp af andre Python-biblioteker
Beautiful Soup er ikke det eneste Python-bibliotek, som du kan bruge til web-skrabning. Der er andre biblioteker derude. Hver med sine egne fordele og begrænsninger. Undersøg dem for at finde ud af, hvilken der passer bedst til din brugssituation.