Web-kaappaus on yksi parhaista tiedonkeruumenetelmistä tiedon keräämiseen ja mukautettujen tietojoukkojen rakentamiseen sen päälle.

Laadukkaat tietojoukot ovat välttämättömiä tällä datalähtöisen päätöksenteon aikakaudella. Vaikka julkisesti saatavilla olevia tietojoukkoja on useita, saatat joutua luomaan mukautettuja tietojoukkoja, jotka vastaavat erityistarpeitasi. Verkkokaappauksen avulla voit poimia tietoja verkkosivustoilta. Voit sitten käyttää näitä tietoja oman tietojoukon luomiseen.

Yleiskatsaus tiedonkeruumenetelmiin

Tiedonkeruumenetelmiä on erilaisia. Niihin kuuluvat manuaalinen tietojen syöttäminen, API, julkiset tietojoukot ja verkkokaappaus. Jokaisella menetelmällä on etunsa ja rajoituksensa.

Manuaalinen tietojen syöttäminen on aikaa vievää ja altista inhimillisille virheille, erityisesti laajamittaisessa tiedonkeruussa. Se on kuitenkin hyödyllinen pienimuotoisessa tiedonkeruussa ja silloin, kun dataa ei ole saatavilla muilla tavoilla.

Sovellusliittymien avulla kehittäjät voivat käyttää ja noutaa tietoja jäsennellyllä tavalla. Ne tarjoavat usein reaaliaikaista tai säännöllisesti päivitettävää tietoa. API-käyttö saattaa kuitenkin olla rajoitettu, vaatia todennusta tai käyttörajoituksia.

instagram viewer

Julkiset tietojoukot kattavat laajan valikoiman aiheita ja alueita. Ne kerätään valmiiksi ja tulevat usein jäsennellyssä muodossa, joten ne ovat helposti saatavilla. Ne voivat säästää aikaa ja vaivaa, kun vaaditut tiedot ovat yhdenmukaisia ​​käytettävissä olevien tietojoukkojen kanssa. Ne eivät kuitenkaan välttämättä aina kata erityistarpeitasi tai ole ajan tasalla.

Web scraping tarjoaa tavan kerätä tietoja verkkosivustoilta, jotka eivät tarjoa sovellusliittymiä tai joilla on rajoitettu käyttöoikeus. Se mahdollistaa mukauttamisen, skaalautuvuuden ja mahdollisuuden kerätä tietoja useista lähteistä. Se vaatii kuitenkin ohjelmointitaitoja, HTML-rakenteen tuntemusta sekä laillisten ja eettisten ohjeiden noudattamista.

Web-kaappauksen valitseminen tiedonkeruuta varten

Web-kaappauksen avulla voit poimia tietoja suoraan verkkosivuilta, jolloin pääset käsiksi monenlaisiin tietolähteisiin. Sen avulla voit myös hallita, mitä tietoja puretaan ja miten ne rakennetaan. Näin kaavintaprosessi on helppo räätälöidä vastaamaan erityisvaatimuksiasi ja poimimaan projektiisi tarvitsemasi tarkat tiedot.

Tietolähteen tunnistaminen

Ensimmäinen vaihe verkkokaappauksessa on tietolähteen tunnistaminen. Tämä on verkkosivusto, joka sisältää tiedot, jotka haluat kaapata. Kun valitset tietolähdettä, varmista, että noudatat lähteen käyttöehtoja. Tämä artikkeli käyttää tietolähteenä IMDb: tä (Internet Movie Database).

Ympäristösi luominen

Luo virtuaalinen ympäristö. Suorita sitten seuraava komento asentaaksesi tarvittavat kirjastot.

pip asennus pyytää beautifulsoup4 pandaa

Tulet käyttämään pyynnöt kirjasto HTTP-pyyntöjen tekemiseen. kaunis keitto 4 jäsentää HTML-sisältöä ja poimia tietoja verkkosivuilta. Lopuksi käytät pandat käsitellä ja analysoida tietoja.

Täysi lähdekoodi on saatavilla a GitHub-arkisto.

Web-kaappausskriptin kirjoittaminen

Tuo asennetut kirjastot skriptiin, jotta voit käyttää niiden tarjoamia toimintoja.

tuonti pyynnöt
alkaen bs4 tuonti Kaunis keitto
tuonti aika
tuonti pandat kuten pd
tuonti re

The aika ja re moduulit ovat osa Python-standardikirjastoa. Ei siis vaadi erillisiä asennuksia.

aika lisää viivästyksiä kaavintaprosessiin samalla re tulee toimeen säännöllisiä lausekkeita.

Tulet käytä Beautiful Soup -sivustoa kohdesivuston raapumiseen.

Luo funktio, joka lähettää HTTP GET -pyynnön kohde-URL-osoitteeseesi. Sen pitäisi sitten hakea vastauksen sisältö ja luoda a Kaunis keitto objekti HTML-sisällöstä.

defget_soup(url, params=Ei mitään, headers=Ei mitään):
vastaus = requests.get (url, params=params, headers=headers)
keitto = BeautifulSoup (response.content, "html.parser")
palata keitto

Seuraava vaihe on tietojen poimiminen tiedostosta Kaunis keitto esine.

Tietojen poimimiseksi sinun on ymmärrettävä kohdesivustosi rakenne. Tämä sisältää verkkosivuston HTML-koodin tarkastamisen. Tämä auttaa sinua tunnistamaan elementit ja attribuutit, jotka sisältävät tiedot, jotka haluat purkaa. Voit tarkistaa kohdesivustosi avaamalla sen linkin verkkoselaimessa ja siirtymällä verkkosivulle, joka sisältää tiedot, jotka haluat kaapata.

Napsauta sitten verkkosivua hiiren kakkospainikkeella ja valitse Tarkastaa kontekstivalikosta. Tämä avaa selaimen kehittäjätyökalut.

Etsi verkkosivun HTML-koodista elementtejä, jotka sisältävät tiedot, jotka haluat kaapata. Kiinnitä huomiota HTML-tunnisteisiin, luokkiin ja attribuutteihin, jotka liittyvät tarvitsemiisi tietoihin. Käytät niitä valitsimien luomiseen tietojen purkamiseksi BeautifulSoupin avulla. Yllä olevasta kuvakaappauksesta näet, että elokuvan nimi on sisällä lister-item-header luokkaa. Tarkista jokainen ominaisuus, jonka haluat purkaa.

Luo funktio, joka poimii tiedot Kaunis keitto esine. Tässä tapauksessa funktio etsii elokuvan nimen, luokituksen, kuvauksen, genren, julkaisupäivän, ohjaajat ja tähdet käyttämällä sopivia HTML-tageja ja luokkaattribuutteja.

defPura_elokuvatiedot(elokuva):
title = movie.find("h3", luokka_="lister-item-header").löytö("a").teksti
luokitus = elokuva.find("div", luokka_="ratings-imdb-rating").strong.text
kuvaus = elokuva.find("div", luokka_="lister-item-content").find_all("p")[1].teksti.nauha()
genre_element = movie.find("span", luokka_="genre")
genre = genre_element.text.strip() jos genre_element muuEi mitään
release_date = movie.find("span", luokka_="lister-item-year text-muted unbold").text.strip()
ohjaaja_tähdet = elokuva.find("p", luokka_="teksti mykistetty").find_all("a")
ohjaajat = [henkilö.teksti varten henkilö sisään ohjaaja_tähdet[:-1]]
tähdet = [henkilö.teksti varten henkilö sisään ohjaaja_tähdet[-1:]]
elokuvan_tiedot = {
"Otsikko": otsikko,
"Arviointi": arvosana,
"Kuvaus": kuvaus,
"Genre": genre,
"Julkaisupäivä": Julkaisupäivä,
"Ohjaajat": ohjaajat,
"Tähdet": tähdet
}
palata elokuvan_tiedot

Luo lopuksi toiminto, joka suorittaa varsinaisen kaapimisen käyttämällä kahta yllä olevaa toimintoa. Se kestää vuoden ja enimmäismäärän elokuvia, jotka haluat kaapata.

defscrape_imdb_movies(vuosi, raja):
base_url = " https://www.imdb.com/search/title"
otsikot = {"Hyväksy kieli": "en-US, en; q = 0,9"}
elokuvat = []
aloita = 1
sillä aikaa len (elokuvat) < raja:
params = {
"Julkaisupäivä": vuosi,
"järjestellä": "äänien_määrä, lasku",
"alkaa": alkaa
}
keitto = get_soup (base_url, params=params, headers=headers)
movie_list = keitto.find_all("div", luokka_="lister-item mode-advanced")
jos len (movie_list) == 0:
tauko
varten elokuva sisään movie_list:
movie_data = pura_elokuvan_tiedot (elokuva)
movies.append (movie_data)
jos len (elokuvat) >= raja:
tauko
aloita += 50# IMDb näyttää 50 elokuvaa sivulla
time.sleep(1) # Lisää viive välttääksesi palvelimen ylikuormituksen
palata elokuvia

Soita sitten def scrape_imdb_movies tekemään kaapimista.

# Scrape 1000 -elokuvaa julkaistiin vuonna 2023 (tai niin monta kuin saatavilla)
elokuvat = scrape_imdb_movies(2023, 1000)

Olet nyt kopioinut tiedot.

Seuraava vaihe on luoda tietojoukko näistä tiedoista.

Tietojoukon luominen kerätyistä tiedoista

Luo DataFrame Pandasin avulla poistetuista tiedoista.

df = pd. DataFrame (elokuvat)

Suorita sitten tietojen esikäsittely ja puhdistus. Poista tässä tapauksessa rivit, joista puuttuu arvoja. Poimi sitten vuosi julkaisupäivämäärästä ja muunna se numeroiksi. Poista tarpeettomat sarakkeet. Muunna Luokitus sarakkeesta numeerisiksi. Poista lopuksi ei-aakkosmerkit Otsikko sarakkeessa.

df = df.dropna()
df["Julkaisuvuosi"] = df['Julkaisupäivä'].str.extract(r'(\d{4})')
df["Julkaisuvuosi"] = pd.to_numeric (df["Julkaisuvuosi"],
virheet ='pakottaa').astype("Int64")
df = df.drop(['Julkaisupäivä'], akseli=1)
df["Arviointi"] = pd.to_numeric (df["Arviointi"], virheet='pakottaa')
df['Title'] = df['Title'].Käytä(lambda x: re.sub(r'\W+', ' ', x))

Tallenna tiedot tiedostoon myöhempää käyttöä varten projektissasi.

df.to_csv("imdb_movies_dataset.csv", indeksi=Väärä)

Tulosta lopuksi tietojoukon viisi ensimmäistä riviä nähdäksesi miltä se näyttää.

df.head()

Tulos on alla olevan kuvakaappauksen mukainen:

Sinulla on nyt verkkokaappauksella saatu tietojoukko.

Web-kaappaus muiden Python-kirjastojen avulla

Beautiful Soup ei ole ainoa Python-kirjasto, jota voit käyttää web-kaappaukseen. Siellä on muitakin kirjastoja. Jokaisella on omat etunsa ja rajoituksensa. Tutki niitä saadaksesi selville, mikä niistä sopii parhaiten käyttötarkoitukseesi.