Tīmekļa skrāpēšana ir viena no labākajām datu vākšanas metodēm, lai vāktu datus un izveidotu pielāgotas datu kopas.

Šajā uz datiem balstītā lēmumu pieņemšanas laikmetā ir ļoti svarīgi nodrošināt augstas kvalitātes datu kopas. Lai gan ir daudzas publiski pieejamas datu kopas, dažreiz jums var būt nepieciešams izveidot pielāgotas datu kopas, kas atbilst jūsu īpašajām vajadzībām. Tīmekļa skrāpēšana ļauj iegūt datus no vietnēm. Pēc tam varat izmantot šos datus, lai izveidotu savu pielāgoto datu kopu.

Pārskats par datu vākšanas metodēm

Ir dažādas datu vākšanas metodes. Tie ietver manuālu datu ievadi, API, publiskas datu kopas un tīmekļa izkopšanu. Katrai metodei ir savas priekšrocības un ierobežojumi.

Manuāla datu ievade ir laikietilpīga un pakļauta cilvēku kļūdām, īpaši liela mēroga datu vākšanai. Tomēr tas ir noderīgi neliela mēroga datu vākšanai un gadījumos, kad dati nav pieejami citos veidos.

API ļauj izstrādātājiem strukturētā veidā piekļūt datiem un izgūt tos. Tie bieži sniedz reāllaika vai regulāri atjauninātu informāciju. Tomēr API piekļuve var būt ierobežota, nepieciešama autentifikācija vai lietošanas ierobežojumi.

instagram viewer

Publiskās datu kopas aptver plašu tēmu un jomu klāstu. Tie ir iepriekš savākti un bieži tiek piegādāti strukturētā formātā, padarot tos viegli pieejamus. Tie var ietaupīt laiku un pūles, kad nepieciešamie dati sakrīt ar pieejamajām datu kopām. Tomēr tie ne vienmēr var apmierināt jūsu īpašās vajadzības vai būt atjaunināti.

Tīmekļa skrāpēšana nodrošina veidu, kā apkopot datus no vietnēm, kas nepiedāvā API vai kurām ir ierobežota piekļuve. Tas nodrošina pielāgošanu, mērogojamību un iespēju vākt datus no vairākiem avotiem. Tomēr tas prasa programmēšanas prasmes, zināšanas par HTML struktūru un juridisko un ētisko vadlīniju ievērošanu.

Tīmekļa skrāpēšanas izvēle datu apkopošanai

Tīmekļa skrāpēšana ļauj iegūt informāciju tieši no tīmekļa lapām, nodrošinot piekļuvi plašam datu avotu klāstam. Tas arī ļauj jums kontrolēt, kādus datus iegūt un kā tos strukturēt. Tādējādi ir viegli pielāgot skrāpēšanas procesu, lai tas atbilstu jūsu īpašajām prasībām un iegūtu precīzu informāciju, kas nepieciešama jūsu projektam.

Datu avota identificēšana

Pirmais tīmekļa nokasīšanas solis ir datu avota identificēšana. Šī ir vietne, kurā ir dati, kurus vēlaties nokasīt. Izvēloties datu avotu, noteikti ievērojiet avota pakalpojumu sniegšanas noteikumus. Šajā rakstā kā datu avots tiks izmantota IMDb (Internet Movie Database).

Jūsu vides iestatīšana

Iestatiet virtuālo vidi. Pēc tam palaidiet šo komandu, lai instalētu vajadzīgās bibliotēkas.

pip instalācijas pieprasījumi beautifulsoup4 pandas

Jūs izmantosiet pieprasījumus bibliotēku, lai veiktu HTTP pieprasījumus. skaista zupa4 lai parsētu HTML saturu un izvilktu datus no tīmekļa lapām. Visbeidzot, jūs izmantosit pandas manipulēt un analizēt datus.

Pilns avota kods ir pieejams a GitHub repozitorijs.

Web nokasīšanas skripta rakstīšana

Importējiet instalētās bibliotēkas savā skriptā, lai varētu izmantot to nodrošinātās funkcijas.

imports pieprasījumus
no bs4 imports Skaista zupa
imports laiks
imports pandas pd
imports re

The laiks un re moduļi ir daļa no Python standarta bibliotēkas. Tāpēc nav nepieciešama atsevišķa instalācija.

laiks radīs aizkavēšanos nokasīšanas procesā re tiks galā ar regulāras izteiksmes.

Jūs to darīsit izmantojiet Skaisto zupu, lai nokasītu mērķa vietni.

Izveidojiet funkciju, kas nosūtīs HTTP GET pieprasījumu uz jūsu mērķa URL. Pēc tam tai vajadzētu izgūt atbildes saturu un izveidot a Skaista zupa objektu no HTML satura.

defget_zupa(url, params=nav, headers=nav):
atbilde = requests.get (url, params=params, headers=headers)
zupa = BeautifulSoup (response.content, "html.parser")
atgriezties zupa

Nākamais solis ir iegūt informāciju no Skaista zupa objektu.

Lai iegūtu informāciju, jums ir jāsaprot mērķa vietnes struktūra. Tas ietver vietnes HTML koda pārbaudi. Tas palīdzēs identificēt elementus un atribūtus, kas satur datus, kurus vēlaties iegūt. Lai pārbaudītu savu mērķa vietni, atveriet tās saiti tīmekļa pārlūkprogrammā un pārejiet uz tīmekļa lapu, kurā ir dati, kurus vēlaties nokasīt.

Pēc tam ar peles labo pogu noklikšķiniet uz tīmekļa lapas un atlasiet Pārbaudīt no konteksta izvēlnes. Tādējādi tiks atvērti pārlūkprogrammas izstrādātāja rīki.

Tīmekļa lapas HTML kodā meklējiet elementus, kas satur datus, kurus vēlaties nokasīt. Pievērsiet uzmanību HTML tagiem, klasēm un atribūtiem, kas saistīti ar nepieciešamajiem datiem. Jūs tos izmantosit, lai izveidotu atlasītājus datu iegūšanai, izmantojot BeautifulSoup. Augšējā ekrānuzņēmumā var redzēt, ka filmas nosaukums ir iekšpusē lister-item-header klasē. Pārbaudiet katru objektu, kuru vēlaties iegūt.

Izveidojiet funkciju, kas izgūs informāciju no Skaista zupa objektu. Šajā gadījumā funkcija atrod filmas nosaukumu, vērtējumu, aprakstu, žanru, izlaišanas datumu, režisorus un zvaigznes, izmantojot atbilstošus HTML tagus un klases atribūtus.

defekstrakts_filmas_dati(filma):
virsraksts = filma.find("h3", klase_="lister-item-header").Atrast("a").teksts
vērtējums = filma.find("div", klase_="vērtējumi-imdb-vērtējums").spēcīgs.teksts
apraksts = filma.find("div", klase_="lister-item-content").atrast_visu("p")[1].text.strip()
žanra_elements = filma.atrast("span", klase_="žanrs")
žanrs = žanra_elements.teksts.josla() ja žanra_elements citsNav
release_date = filma.atrast("span", klase_="lister-item-year text-muted unbold").text.strip()
režisors_zvaigznes = filma.atrast("p", klase_="teksta izslēgta").atrast_visu("a")
direktori = [persona.teksts priekš persona iekšā režisors_zvaigznes[:-1]]
zvaigznes = [person.teksts priekš persona iekšā režisors_zvaigznes[-1:]]
filmas_dati = {
"Nosaukums": virsraksts,
"Vērtējums": vērtējums,
"Apraksts": apraksts,
"Žanrs": žanrs,
"Izdošanas datums": izdošanas datums,
"Direktori": režisori,
"Zvaigznes": zvaigznes
}
atgriezties filmas_dati

Visbeidzot, izveidojiet funkciju, kas veiks faktisko nokasīšanu, izmantojot divas iepriekš minētās funkcijas. Tas prasīs gadu un maksimālo filmu skaitu, ko vēlaties nokasīt.

defscrape_imdb_movies(gads, limits):
bāzes_url = " https://www.imdb.com/search/title"
galvenes = {"Pieņemt-valoda": "en-US, en; q=0,9"}
filmas = []
sākums = 1
kamēr len (filmas) < limits:
parametri = {
"izdošanas datums": gads,
"šķirot": "balsu_skaits, samazinājums",
"sākt": sākt
}
zupa = get_soup (base_url, params=params, headers=headers)
movie_list = zupa.find_all("div", klase_="saraksta vienuma režīms - uzlabots")
ja len (filmu_saraksts) == 0:
pārtraukums
priekš filma iekšā movie_list:
movie_data = ekstrakts_filmas_dati (filma)
movies.append (movie_data)
ja len (filmas) >= limits:
pārtraukums
sākums += 50# IMDb parāda 50 filmas vienā lapā
time.sleep(1) # Pievienojiet aizkavi, lai nepārslogotu serveri
atgriezties filmas

Pēc tam zvaniet uz def scrape_imdb_movies veikt skrāpēšanu.

# Scrape 1000 filmas, kas izlaistas 2023. gadā (vai tik daudz, cik pieejamas)
filmas = scrape_imdb_movies(2023, 1000)

Tagad esat izkopis datus.

Nākamais solis ir izveidot datu kopu no šiem datiem.

Datu kopas izveide no iegūtajiem datiem

Izveidojiet DataFrame, izmantojot Pandas no izskrāpētajiem datiem.

df = pd. DataFrame (filmas)

Pēc tam veiciet datu priekšapstrādi un tīrīšanu. Šādā gadījumā noņemiet rindas ar trūkstošām vērtībām. Pēc tam izņemiet gadu no izlaišanas datuma un konvertējiet to uz skaitļiem. Noņemiet nevajadzīgās kolonnas. Konvertēt Vērtējums kolonnu uz ciparu. Visbeidzot noņemiet rakstzīmes, kas nav alfabēta Nosaukums kolonna.

df = df.dropna()
df["Izlaiduma gads"] = df['Izdošanas datums'].str.extract(r'(\d{4})')
df["Izlaiduma gads"] = pd.to_numeric (df["Izlaiduma gads"],
kļūdas ="piespiest".astype("Int64")
df = df.drop(['Izdošanas datums'], ass=1)
df["Vērtējums"] = pd.to_numeric (df["Vērtējums"], kļūdas="piespiest")
df["Nosaukums"] = df["Nosaukums"].apply(lambda x: re.sub(r'\W+', ' ', x))

Saglabājiet datus failā, lai vēlāk tos izmantotu savā projektā.

df.to_csv("imdb_movies_dataset.csv", indekss=Nepatiesi)

Visbeidzot, izdrukājiet pirmās piecas datu kopas rindas, lai redzētu, kā tā izskatās.

df.head()

Izvade ir tāda, kā parādīts zemāk esošajā ekrānuzņēmumā:

Tagad jums ir datu kopa, kas iegūta, izmantojot tīmekli.

Web nokasīšana, izmantojot citas Python bibliotēkas

Skaistā zupa nav vienīgā Python bibliotēka, ko varat izmantot tīmekļa skrāpēšanai. Ir arī citas bibliotēkas. Katram ar savām priekšrocībām un ierobežojumiem. Izpētiet tos, lai noskaidrotu, kurš no tiem vislabāk atbilst jūsu lietošanas gadījumam.