Webbskrapning är en av de bästa datainsamlingsmetoderna för att samla in data och bygga anpassade datamängder ovanpå det.

Att ha högkvalitativa datauppsättningar är viktigt i denna tid av datadrivet beslutsfattande. Även om det finns många offentligt tillgängliga datauppsättningar, kan du ibland behöva bygga anpassade datauppsättningar som uppfyller dina specifika behov. Webbskrapning låter dig extrahera data från webbplatser. Du kan sedan använda dessa data för att skapa din anpassade datauppsättning.

Översikt över datainsamlingsmetoder

Det finns olika datainsamlingsmetoder. De inkluderar manuell datainmatning, API: er, offentliga datauppsättningar och webbskrapning. Varje metod har sina fördelar och begränsningar.

Manuell datainmatning är tidskrävande och utsatt för mänskliga fel, särskilt för storskalig datainsamling. Det är dock användbart för småskalig datainsamling och när data inte är tillgänglig på andra sätt.

API: er tillåter utvecklare att komma åt och hämta data på ett strukturerat sätt. De tillhandahåller ofta information i realtid eller regelbundet uppdaterad. API-åtkomst kan dock vara begränsad, kräva autentisering eller ha användningsbegränsningar.

Offentliga datauppsättningar täcker ett brett spektrum av ämnen och domäner. De är förinsamlade och kommer ofta i ett strukturerat format, vilket gör dem lättillgängliga. De kan spara tid och ansträngning när de nödvändiga uppgifterna stämmer överens med tillgängliga datauppsättningar. Men de kanske inte alltid täcker dina specifika behov eller är uppdaterade.

Webbskrapning ger ett sätt att samla in data från webbplatser som inte erbjuder API: er eller har begränsad åtkomst. Det möjliggör anpassning, skalbarhet och möjligheten att samla in data från flera källor. Det kräver dock programmeringskunskaper, kunskap om HTML-struktur och efterlevnad av juridiska och etiska riktlinjer.

Välja webbskrapning för datainsamling

Webbskrapning gör att du kan extrahera information direkt från webbsidor, vilket ger dig tillgång till ett brett utbud av datakällor. Det ger dig också kontroll över vilken data som ska extraheras och hur den ska struktureras. Detta gör det enkelt att skräddarsy skrapningsprocessen för att möta dina specifika krav och extrahera den exakta information du behöver för ditt projekt.

Identifiera datakällan

Det första steget i webbskrapning är att identifiera datakällan. Det här är webbplatsen som innehåller data som du vill skrapa. När du väljer datakälla, se till att du anpassar dig till källans användarvillkor. Den här artikeln kommer att använda IMDb (Internet Movie Database) som datakälla.

Ställa in din miljö

Skapa en virtuell miljö. Kör sedan följande kommando för att installera de nödvändiga biblioteken.

pip installation begär beautifulsoup4 pandor

Du kommer att använda förfrågningar bibliotek för att göra HTTP-förfrågningar. vacker soppa4 att analysera HTML-innehåll och extrahera data från webbsidor. Slutligen kommer du att använda pandor att manipulera och analysera data.

Den fullständiga källkoden finns tillgänglig i en GitHub-förråd.

Skriva Web Scraping Script

Importera de installerade biblioteken i ditt skript för att kunna använda funktionerna de tillhandahåller.

importera förfrågningar
från bs4 importera Vacker soppa
importera tid
importera pandor som pd
importera re

De tid och re moduler är en del av Pythons standardbibliotek. Kräver därför inte separata installationer.

tid kommer att lägga till förseningar till skrapningsprocessen medan re kommer att ta itu med vanliga uttryck.

Du kommer använd Beautiful Soup för att skrapa målwebbplatsen.

Skapa en funktion som skickar en HTTP GET-begäran till din måladress. Den ska sedan hämta innehållet i svaret och skapar en Vacker soppa objekt från HTML-innehållet.

deffå_soppa(url, params=Ingen, rubriker=Inga):
respons = requests.get (url, params=params, headers=headers)
soppa = BeautifulSoup (response.content, "html.parser")
lämna tillbaka soppa

Nästa steg är att extrahera information från Vacker soppa objekt.

För att extrahera informationen behöver du förstå din målwebbplatsstruktur. Detta innebär att inspektera HTML-koden för webbplatsen. Detta hjälper dig att identifiera de element och attribut som innehåller data du vill extrahera. För att inspektera din målwebbplats, öppna dess länk i en webbläsare och navigera till webbsidan som innehåller de data du vill skrapa.

Högerklicka sedan på webbsidan och välj Inspektera från snabbmenyn. Detta öppnar webbläsarens utvecklarverktyg.

I HTML-koden för webbsidan letar du efter element som innehåller data du vill skrapa. Var uppmärksam på HTML-taggar, klasser och attribut som är kopplade till den data du behöver. Du kommer att använda dem för att skapa väljare för att extrahera data med hjälp av BeautifulSoup. I skärmdumpen ovan kan du se att titeln på filmen är inuti lister-item-header klass. Inspektera varje funktion du vill extrahera.

Skapa en funktion som extraherar information från Vacker soppa objekt. I det här fallet hittar funktionen filmens titel, betyg, beskrivning, genre, släppdatum, regissörer och stjärnor för filmen med hjälp av lämpliga HTML-taggar och klassattribut.

defextrahera_filmdata(film):
title = movie.find("h3", klass_="lister-item-header").hitta("a").text
betyg = movie.find("div", klass_="betyg-imdb-betyg").stark.text
beskrivning = movie.find("div", klass_="lister-item-content").hitta alla("p")[1].text.strip()
genre_element = movie.find("spänna", klass_="genre")
genre = genre_element.text.strip() om genre_element annanIngen
release_date = movie.find("spänna", klass_="lister-item-year text-muted unbold").text.strip()
director_stars = movie.find("p", klass_="textavstängd").hitta alla("a")
regissörer = [person.text för person i regissörsstjärnor[:-1]]
stjärnor = [person.text för person i regissörsstjärnor[-1:]]
movie_data = {
"Titel": titel,
"Betyg": betyg,
"Beskrivning": beskrivning,
"Genre": genre,
"Utgivningsdatum": Utgivningsdatum,
"Regissörer": direktörer,
"Stjärnor": stjärnor
}
lämna tillbaka movie_data

Slutligen, skapa en funktion som gör själva skrapan med hjälp av ovanstående två funktioner. Det kommer att ta året och maximalt antal filmer du vill skrapa.

defscrape_imdb_movies(år, gräns):
base_url = " https://www.imdb.com/search/title"
rubriker = {"Acceptera-språk": "sv-US, sv; q=0,9"}
filmer = []
börja = 1
medan len (filmer) < limit:
params = {
"Utgivningsdatum": år,
"sortera": "antal_votes, desc",
"Start": Start
}
soppa = get_soppa (base_url, params=params, headers=headers)
movie_list = soup.find_all("div", klass_="lister-item mode-avancerat")
om len (filmlista) == 0:
ha sönder
för film i filmlista:
movie_data = extrahera_movie_data (film)
movies.append (movie_data)
om len (filmer) >= gräns:
ha sönder
börja += 50# IMDb visar 50 filmer per sida
tid.sömn(1) # Lägg till en fördröjning för att undvika att servern överbelastas
lämna tillbaka filmer

Ring sedan till def scrape_imdb_movies att göra skrapningen.

# Skrapa 1000 filmer släppta 2023 (eller så många som tillgängliga)
filmer = scrape_imdb_movies(2023, 1000)

Du har nu skrapat data.

Nästa steg är att skapa en datauppsättning från dessa data.

Skapa en datamängd från skrapad data

Skapa en DataFrame med Pandas från de skrapade uppgifterna.

df = pd. DataFrame (filmer)

Gör sedan förbearbetning och rengöring av data. Ta i så fall bort rader med saknade värden. Extrahera sedan året från releasedatumet och konvertera det till numeriskt. Ta bort onödiga kolumner. Konvertera Betyg kolumn till numerisk. Slutligen, ta bort icke-alfabetiska tecken från Titel kolumn.

df = df.dropna()
df['Utgivningsår'] = df['Utgivningsdatum'].str.extract(r'(\d{4})')
df['Utgivningsår'] = pd.to_numeric (df['Utgivningsår'],
fel='tvinga').astype('Int64')
df = df.drop(['Utgivningsdatum'], axel=1)
df['Betyg'] = pd.to_numeric (df['Betyg'], fel='tvinga')
df['Titel'] = df['Titel'].tillämpa(lambda x: re.sub(r'\W+', ' ', x))

Lagra data i en fil för senare användning i ditt projekt.

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

Slutligen, skriv ut de första fem raderna i din datauppsättning för att få en bild av hur den ser ut.

df.head()

Utgången är som visas i skärmdumpen nedan:

Du har nu en datauppsättning som erhållits genom webbskrapning.

Webbskrapning med andra Python-bibliotek

Beautiful Soup är inte det enda Python-biblioteket som du kan använda för webbskrapning. Det finns andra bibliotek där ute. Var och en med sina egna fördelar och begränsningar. Undersök dem för att ta reda på vilken som passar ditt användningsfall bäst.