Skrap et nettsted med denne vakre opplæringen til suppe -python

Skrap et nettsted med denne vakre opplæringen til suppe -python

Beautiful Soup er et Python-bibliotek med åpen kildekode. Den bruker navigasjonsparers for å skrape innholdet i XML- og HTML -filer. Du trenger data for flere analytiske formål. Men hvis du er ny på Python og webskraping, er Pythons vakre suppe -bibliotek verdt å prøve for et webskrapingsprosjekt.





Med Pythons åpen kildekode Beautiful Soup-bibliotek kan du få data ved å skrape hvilken som helst del eller del av en webside med maksimal kontroll over prosessen. I denne artikkelen ser vi på hvordan du kan bruke vakker suppe til å skrape et nettsted.





Hvordan installere vakker suppe og komme i gang med det

Før vi fortsetter, i denne vakre suppeopplæringsartikkelen, bruker vi Python 3 og vakker suppe 4 , den siste versjonen av Beautiful Soup. Sørg for at du lage et virtuelt Python -miljø å isolere prosjektet og dets pakker fra de på din lokale maskin.





hvordan slår jeg av lommelykten

For å komme i gang må du installere det vakre suppebiblioteket i ditt virtuelle miljø. Beautiful Soup er tilgjengelig som en PyPi -pakke for alle operativsystemer, slik at du kan installere den med pip installer beautifulsoup4 kommando via terminalen.

Men hvis du er på Debian eller Linux, fungerer kommandoen ovenfor fortsatt, men du kan installere den med pakkelederen ved å kjøre apt-get install python3-bs4 .



Vakker suppe skraper ikke nettadresser direkte. Det fungerer bare med ferdige HTML- eller XML-filer. Det betyr at du ikke kan sende en URL rett inn i den. For å løse dette problemet må du få nettadressen til målnettstedet med Pythons forespørselsbibliotek før du mater det til Beautiful Soup.

For å gjøre det biblioteket tilgjengelig for skrapen, kjør pip installasjonsforespørsler kommando via terminalen.





Kjør for å bruke XML -parserbiblioteket pip installer lxml å installere den.

Inspiser nettsiden du ønsker å skrape

Før du skraper et nettsted du ikke er kjent med, er det best å inspisere elementene. Du kan gjøre dette ved å bytte nettleser til utviklermodus. Det er ganske enkelt å bruk Chrome DevTools hvis du bruker Google Chrome.





Det er imidlertid nødvendig å inspisere en webside for å vite mer om HTML -tagger, attributter, klasser og ID -er. Å gjøre det avslører kjerneelementene på en webside og dens innholdstyper.

Det hjelper deg også med å utvikle de beste strategiene du kan bruke for å få de eksakte dataene du ønsker fra et nettsted og hvordan du kan få det.

Hvordan skrape data fra et nettsted med vakker suppe

Nå som du har alt klart og klart, åpner du en foretrukket kodeditor og oppretter en ny Python -fil, og gir den et valgt navn. Du kan imidlertid også gjøre bruk av nettbaserte IDE-er som Jupyter Notebook hvis du ikke er kjent med å kjøre Python via kommandolinjen.

Deretter importerer du de nødvendige bibliotekene:

from bs4 import BeautifulSoup
import requests

La oss først se hvordan forespørselsbiblioteket fungerer:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Når du kjører koden ovenfor, returnerer den 200 -status, som indikerer at forespørselen din er vellykket. Ellers får du en 400 -status eller andre feilstatuser som indikerer en mislykket GET -forespørsel.

Husk å alltid erstatte nettstedets URL i parentes med måladressen din.

Når du får nettstedet med forespørsel, sender du den videre til Beautiful Soup, som nå kan lese innholdet som HTML- eller XML-filer ved hjelp av den innebygde XML- eller HTML-parseren, avhengig av hvilket format du har valgt.

Ta en titt på denne neste kodebiten for å se hvordan du gjør dette med HTML -parseren:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Koden ovenfor returnerer hele DOM på en webside med innholdet.

Du kan også få en mer justert versjon av DOM ved å bruke pryd metode. Du kan prøve dette for å se resultatet:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Du kan også få det rene innholdet på en webside uten å laste elementet med .tekst metode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Hvordan skrape innholdet på en webside etter taggenavnet

Du kan også skrape innholdet i en bestemt tag med vakker suppe. For å gjøre dette må du inkludere navnet på måltaggen i forespørselen din om vakker suppe.

La oss for eksempel se hvordan du kan få innholdet i h2 tagger på en webside.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

I kodebiten ovenfor, suppe. h2 returnerer den første h2 element på websiden og ignorerer resten. For å laste alle h2 elementer, kan du bruke finn_all innebygd funksjon og til loop av Python:

Slik tørker du en harddisk helt Windows 10
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Denne blokkblokken returnerer alt h2 elementene og innholdet i dem. Du kan imidlertid få innholdet uten å laste inn taggen ved å bruke .string metode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Du kan bruke denne metoden for en hvilken som helst HTML -tag. Alt du trenger å gjøre er å erstatte h2 tag med den du liker.

Du kan imidlertid også skrape flere koder ved å sende en liste med koder inn i finn_all metode. For eksempel skraper blokkblokken nedenfor innholdet i til , h2 , og tittel tagger:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Hvordan skrape en webside ved hjelp av ID og klassens navn

Etter å ha inspisert et nettsted med DevTools, lar det deg vite mer om id- og klasseattributtene som inneholder hvert element i DOM. Når du har denne informasjonen, kan du skrape den websiden ved hjelp av denne metoden. Det er nyttig når innholdet i en målkomponent løkker ut fra databasen.

Du kan bruke finne metode for id- og klasseskrapere. i motsetning til finn_all metode som returnerer et gjentakelig objekt, finne metoden fungerer på et enkelt, ikke-iterbart mål, som er id i dette tilfellet. Så du trenger ikke å bruke til sløyfe med det.

La oss se på et eksempel på hvordan du kan skrape innholdet på en side nedenfor ved hjelp av id:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

For å gjøre dette for et klassenavn, erstatt id med klasse . Imidlertid skriver klasse resulterer direkte i syntaksforvirring ettersom Python ser det som et nøkkelord. For å omgå denne feilen må du skrive en understreking foran klassen slik: klasse_ .

I hovedsak blir linjen som inneholder id:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Du kan imidlertid også skrape en webside ved å ringe et bestemt tagnavn med tilhørende ID eller klasse:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Hvordan lage en gjenbrukbar skrape med vakker suppe

Du kan opprette en klasse og sette sammen den forrige koden til en funksjon i den klassen for å lage en gjenbrukbar skrape som får innholdet i noen koder og deres ID -er. Vi kan gjøre dette ved å lage en funksjon som godtar fem argumenter: en URL, to taggenavn og tilhørende ID -er eller klasser.

Anta at du vil skrape prisen på skjorter fra et e-handelsnettsted. Eksempelskraperklassen nedenfor trekker ut pris- og skjortekodene med tilhørende ID -er eller klasser og returnerer den deretter som en Pandas -dataramme med 'Pris' og Shirt_name som kolonnenavn.

Sørg for at du pip installere pandaer via terminalen hvis du ikke allerede har gjort det.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Skraperen du nettopp har laget er en gjenbrukbar modul, og du kan importere og bruke den i en annen Python -fil. For å ringe skrape funksjon fra sin klasse, bruker du scrapeit.scrape ('Nettstedets URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Hvis du ikke oppgir nettadressen og andre parametere, vil ellers uttalelse ber deg om å gjøre det.

For å bruke denne scaperen i en annen Python -fil, kan du importere den slik:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Merk: scraper_module er navnet på Python -filen som inneholder skrapeklassen.

Du kan også sjekke Vakker suppe dokumentasjon hvis du vil dykke dypere inn i hvordan du kan utnytte det best.

Vakker suppe er et verdifullt nettskrapingsverktøy

Beautiful Soup er en kraftig Python -skjermskraper som gir deg kontroll over hvordan dataene dine kommer gjennom under skraping. Det er et verdifullt forretningsverktøy, ettersom det kan gi deg tilgang til konkurrentens nettdata som priser, markedstrender og mer.

hvordan koble hodetelefoner til xbox one

Selv om vi har laget en tagskraper i denne artikkelen, kan du fortsatt leke med dette kraftige Python -biblioteket for å lage mer nyttige skrapeverktøy.

Dele Dele kvitring E -post De beste nettskrapingsverktøyene på nettet

Trenger du å samle inn data fra nettsteder for analytiske formål? Disse verktøyene for nettskraping gjør det enkelt.

Les neste
Relaterte temaer
  • Programmering
  • Python
Om forfatteren Idisou Omisola(94 artikler publisert)

Idowu brenner for alt smart teknologi og produktivitet. På fritiden leker han med koding og bytter til sjakkbrettet når han kjeder seg, men han liker også å bryte fra rutinen en gang i blant. Hans lidenskap for å vise folk veien rundt moderne teknologi motiverer ham til å skrive mer.

Mer fra Idowu Omisola

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere