On pääasiassa kaksi tapaa poimia tietoja verkkosivustosta:
q2 kuukautta
- Käytä verkkosivuston API:ta (jos sellainen on). Esimerkiksi Facebookissa on Facebook Graph API, joka mahdollistaa Facebookiin lähetettyjen tietojen noudon.
- Käytä verkkosivun HTML-koodia ja poimi siitä hyödyllistä tietoa. Tätä tekniikkaa kutsutaan verkon kaapimiseksi tai verkon keräämiseksi tai verkkotietojen poimimiseksi.
Tässä artikkelissa käsitellään Web-kaappauksen vaiheita käyttämällä Pythonin Web Scraping -kehystä nimeltä Beautiful Soup. Verkkokaapimiseen liittyvät vaiheet:
- Lähetä HTTP-pyyntö sen verkkosivun URL-osoitteeseen, jota haluat käyttää. Palvelin vastaa pyyntöön palauttamalla verkkosivun HTML-sisällön. Tätä tehtävää varten käytämme kolmannen osapuolen HTTP-kirjastoa python-pyyntöihin.
- Kun olemme käyttäneet HTML-sisältöä, meidän tehtävämme on jäsentää tiedot. Koska suurin osa HTML-tiedoista on sisäkkäisiä, emme voi poimia tietoja yksinkertaisesti merkkijonokäsittelyn avulla. Tarvitset jäsentimen, joka voi luoda sisäkkäisen/puurakenteen HTML-tiedoista. Saatavilla on monia HTML-jäsennyskirjastoja, mutta edistynein niistä on html5lib.
- Nyt meidän tarvitsee vain navigoida ja etsiä luomassamme jäsennyspuussa, eli puun läpikulkua. Tätä tehtävää varten käytämme toista kolmannen osapuolen python-kirjastoa, Kaunis keitto . Se on Python-kirjasto tietojen poistamiseen HTML- ja XML-tiedostoista.
Vaihe 1: Asenna tarvittavat kolmannen osapuolen kirjastot
- Helpoin tapa asentaa ulkoisia kirjastoja Pythonissa on käyttää pip. pip on paketinhallintajärjestelmä, jota käytetään Pythonilla kirjoitettujen ohjelmistopakettien asentamiseen ja hallintaan. Sinun tarvitsee vain:
pip install requests pip install html5lib pip install bs4>
- Toinen tapa on ladata ne manuaalisesti näistä linkeistä:
Vaihe 2: HTML-sisällön käyttäminen verkkosivulta
Python
import> requests> URL> => 'https:> /> /> www.techcodeview.com> /> data> -> structures> /> '> r> => requests.get(URL)> print> (r.content)> |
>
>
Yritetään ymmärtää tämä koodinpätkä.
- Tuo ensin pyyntökirjasto.
- Määritä sitten sen verkkosivun URL-osoite, jonka haluat kaapata.
- Lähetä HTTP-pyyntö määritettyyn URL-osoitteeseen ja tallenna vastaus palvelimelta vastausobjektiin nimeltä r.
- Nyt, kuten tulostaa r.content saada raakaa HTML-sisältöä verkkosivulta. Se on tyyppiä 'merkkijono'.
Huomautus: Joskus saatat saada virheilmoituksen Ei hyväksytty, joten yritä lisätä selaimen käyttäjäagentti alla olevan mukaisesti. Löydä täältä käyttäjäagentti laitteen ja selaimen mukaan https://deviceatlas.com/blog/list-of-user-agent-strings
Python 3
headers> => {> 'User-Agent'> :> 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'> }> # Here the user agent is for Edge browser on windows 10. You can find your browser user agent from the above given link.> r> => requests.get(url> => URL, headers> => headers)> print> (r.content)> |
>
>
Vaihe 3: jäsennys HTML-sisältö
jännä kieli
Python
singleton suunnittelukuvio java
#This will not run on online IDE> import> requests> from> bs4> import> BeautifulSoup> > URL> => 'http:> /> /> www.values.com> /> inspirational> -> quotes'> r> => requests.get(URL)> > soup> => BeautifulSoup(r.content,> 'html5lib'> )> # If this line causes an error, run 'pip install html5lib' or install html5lib> print> (soup.prettify())> |
>
>
Todella hieno asia BeautifulSoup-kirjastossa on, että se on rakennettu HTML-jäsennyskirjastojen, kuten html5lib, lxml, html.parser jne., päälle. Joten BeautifulSoup-objekti ja määritä jäsennyskirjasto voidaan luoda samanaikaisesti. Yllä olevassa esimerkissä
soup = BeautifulSoup(r.content, 'html5lib')>
Luomme BeautifulSoup-objektin välittämällä kaksi argumenttia:
- r.content : Se on raaka-HTML-sisältöä. html5lib : Määritä HTML-jäsennin, jota haluamme käyttää.
Nyt soup.prettify() on painettu, se antaa visuaalisen esityksen jäsennyspuusta, joka on luotu raaka-HTML-sisällöstä. Vaihe 4: Hae ja navigoi jäsennyspuussa Nyt haluaisimme poimia hyödyllisiä tietoja HTML-sisällöstä. Soup-objekti sisältää kaikki sisäkkäisen rakenteen tiedot, jotka voidaan poimia ohjelmallisesti. Esimerkissämme kaavimme verkkosivua, joka koostuu joistakin lainauksista. Haluaisimme siis luoda ohjelman näiden lainausten (ja kaikkien niihin liittyvien olennaisten tietojen) tallentamiseksi.
Python
kevään alustus
#Python program to scrape website> #and save quotes from website> import> requests> from> bs4> import> BeautifulSoup> import> csv> > URL> => 'http:> /> /> www.values.com> /> inspirational> -> quotes'> r> => requests.get(URL)> > soup> => BeautifulSoup(r.content,> 'html5lib'> )> > quotes> => []> # a list to store quotes> > table> => soup.find(> 'div'> , attrs> => {> 'id'> :> 'all_quotes'> })> > for> row> in> table.findAll(> 'div'> ,> > attrs> => {> 'class'> :> 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'> }):> > quote> => {}> > quote[> 'theme'> ]> => row.h5.text> > quote[> 'url'> ]> => row.a[> 'href'> ]> > quote[> 'img'> ]> => row.img[> 'src'> ]> > quote[> 'lines'> ]> => row.img[> 'alt'> ].split('> #')[0]> > quote[> 'author'> ]> => row.img[> 'alt'> ].split('> #')[1]> > quotes.append(quote)> > filename> => 'inspirational_quotes.csv'> with> open> (filename,> 'w'> , newline> => '') as f:> > w> => csv.DictWriter(f,[> 'theme'> ,> 'url'> ,> 'img'> ,> 'lines'> ,> 'author'> ])> > w.writeheader()> > for> quote> in> quotes:> > w.writerow(quote)> |
>
>
Ennen kuin jatkat, suosittelemme, että käyt läpi soup.prettify()-menetelmällä tulostamamme verkkosivun HTML-sisällön ja yrität löytää kuvion tai tavan navigoida lainauksiin.
- On huomattu, että kaikki lainausmerkit ovat div-säilön sisällä, jonka tunnus on 'all_quotes'. Joten löydämme sen div-elementin (jota kutsutaan taulukoksi yllä olevassa koodissa) käyttämällä löytö() menetelmä:
table = soup.find('div', attrs = {'id':'all_quotes'})>
- Ensimmäinen argumentti on HTML-tunniste, josta haluat etsiä, ja toinen argumentti on sanakirjatyyppinen elementti, joka määrittää kyseiseen tunnisteeseen liittyvät lisäattribuutit. löytö() menetelmä palauttaa ensimmäisen vastaavan elementin. Voit yrittää tulostaa table.prettify() saadaksesi käsityksen siitä, mitä tämä koodinpala tekee.
- Nyt taulukkoelementissä voidaan huomata, että jokainen lainaus on div-säiliön sisällä, jonka luokka on lainaus. Joten iteroimme jokaisen div-säiliön läpi, jonka luokka on lainaus. Tässä käytämme findAll() -menetelmää, joka on samanlainen kuin argumenttien suhteen, mutta se palauttaa luettelon kaikista vastaavista elementeistä. Jokainen lainaus iteroidaan nyt käyttämällä muuttujaa nimeltä rivi. Tässä on yksi esimerkkirivin HTML-sisältö, jotta ymmärrät paremmin:
Harkitse nyt tätä koodinpätkää:
for row in table.find_all_next('div', attrs = {'class': 'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): quote = {} quote['theme'] = row.h5.text quote['url'] = row.a['href'] quote['img'] = row.img['src'] quote['lines'] = row.img['alt'].split(' #')[0] quote['author'] = row.img['alt'].split(' #')[1] quotes.append(quote)>
- Luomme sanakirjan tallentaaksemme kaikki tarjousta koskevat tiedot. Sisäkkäiseen rakenteeseen pääsee pistemerkinnällä. Käytämme HTML-elementin sisällä olevaa tekstiä .text :
quote['theme'] = row.h5.text>
- Voimme lisätä, poistaa, muokata ja käyttää tunnisteen attribuutteja. Tämä tehdään käsittelemällä tunnistetta sanakirjana:
quote['url'] = row.a['href']>
- Lopuksi kaikki lainaukset liitetään luetteloon nimeltä lainausmerkit.
- Lopuksi haluamme tallentaa kaikki tietomme johonkin CSV-tiedostoon.
filename = 'inspirational_quotes.csv' with open(filename, 'w', newline='') as f: w = csv.DictWriter(f,['theme','url','img','lines','author']) w.writeheader() for quote in quotes: w.writerow(quote)>
- Täällä luomme CSV-tiedoston nimeltä inspirational_quotes.csv ja tallennamme kaikki siinä olevat lainaukset myöhempää käyttöä varten.
Joten tämä oli yksinkertainen esimerkki verkkokaavin luomisesta Pythonissa. Täältä voit yrittää poistaa minkä tahansa muun valitsemasi verkkosivuston. Jos sinulla on kysyttävää, lähetä ne alla kommenttiosioon.
Huomautus : Web-kaappausta pidetään laittomana monissa tapauksissa. Se voi myös aiheuttaa sen, että verkkosivusto estää IP-osoitteesi pysyvästi. Tätä blogia on avustanut Nikhil Kumar .