Skrab et websted med denne smukke suppe Python -vejledning

Skrab et websted med denne smukke suppe Python -vejledning

Smuk suppe er et open-source Python-bibliotek. Den bruger navigations -parsere til at skrabe indholdet af XML- og HTML -filer. Du har brug for data til flere analytiske formål. Men hvis du er ny inden for Python og webskrabning, er Pythons smukke suppebibliotek værd at prøve til et webskrabningsprojekt.





Med Pythons open-source Beautiful Soup-bibliotek kan du få data ved at skrabe enhver del eller element på en webside med maksimal kontrol over processen. I denne artikel ser vi på, hvordan du kan bruge Smuk suppe til at skrabe et websted.





Sådan installeres smuk suppe og kommer i gang med det

Inden vi fortsætter, i denne smukke suppe -artikel, bruger vi Python 3 og smuk suppe 4 , den nyeste version af Smuk suppe. Sørg for, at du oprette et virtuelt Python -miljø at isolere dit projekt og dets pakker fra dem på din lokale maskine.





Sådan formateres Windows 10 med usb

For at komme i gang skal du installere det smukke suppebibliotek i dit virtuelle miljø. Beautiful Soup fås som en PyPi -pakke til alle operativsystemer, så du kan installere den med pip installer beautifulsoup4 kommando via terminalen.

Men hvis du er på Debian eller Linux, fungerer ovenstående kommando stadig, men du kan installere den med pakkehåndteringen ved at køre apt-get install python3-bs4 .



Smuk suppe skraber ikke webadresser direkte. Det fungerer kun med færdige HTML- eller XML-filer. Det betyder, at du ikke kan sende en URL direkte ind i den. For at løse dette problem skal du hente URL'en til målwebstedet med Pythons anmodningsbibliotek, før du giver det smuk suppe.

For at gøre biblioteket tilgængeligt for din skraber skal du køre pip installationsanmodninger kommando via terminalen.





Kør for at bruge XML -parserbiblioteket pip installer lxml at installere det.

Undersøg den webside, du ønsker at skrabe

Inden du skraber et websted, du ikke er bekendt med, er en god praksis at inspicere dets elementer. Du kan gøre dette ved at skifte din browser til udviklerens tilstand. Det er ret let at brug Chrome DevTools hvis du bruger Google Chrome.





Det er dog nødvendigt at inspicere en webside for at vide mere om dens HTML -tags, attributter, klasser og id'er. Hvis du gør det, afsløres kerneelementerne på en webside og dens indholdstyper.

Det hjælper dig også med at udvikle de bedste strategier, du kan bruge til at få de nøjagtige data, du ønsker fra et websted, og hvordan du kan få det.

Sådan skraber du et websteds data med smuk suppe

Nu hvor du har alting klar og klar, skal du åbne en foretrukken kodeditor og oprette en ny Python -fil, der giver den et valgt navn. Du kan dog også gøre brug af webbaserede IDE'er som Jupyter Notebook hvis du ikke er bekendt med at køre Python via kommandolinjen.

Importer derefter de nødvendige biblioteker:

from bs4 import BeautifulSoup
import requests

Lad os først se, hvordan forespørgselsbiblioteket fungerer:

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

Når du kører koden ovenfor, returnerer den en 200 -status, hvilket angiver, at din anmodning er vellykket. Ellers får du en 400 -status eller andre fejlstatusser, der angiver en mislykket GET -anmodning.

Husk altid at udskifte webstedets URL i parentes med din målwebadresse.

Når du får webstedet med anmodning, sender du den derefter videre til Beautiful Soup, som nu kan læse indholdet som HTML- eller XML-filer ved hjælp af den indbyggede XML- eller HTML-parser, afhængigt af dit valgte format.

Tag et kig på dette næste kodestykke for at se, hvordan du gø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 dens indhold.

Du kan også få en mere justeret version af DOM ved at bruge prydes metode. Du kan prøve dette for at se dets output:

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 indhold på en webside uden at indlæse dets element med .tekst metode:

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

Sådan skraber du indholdet på en webside efter tagnavnet

Du kan også skrabe indholdet i et bestemt mærke med Smuk suppe. For at gøre dette skal du inkludere navnet på måltagget i din anmodning om smuk skraber.

Lad os f.eks. Se, hvordan du kan få indholdet i h2 tags 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 at indlæse alle h2 elementer, kan du bruge find_all indbygget funktion og til loop af Python:

hvordan man downloader apps på et samsung smart tv
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 kodeblok returnerer alt h2 elementer og deres indhold. Du kan dog få indholdet uden at indlæse mærket ved at bruge .snor 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 bruge denne metode til ethvert HTML -tag. Alt du skal gøre er at udskifte h2 tag med den du kan lide.

Du kan dog også skrabe flere tags ved at sende en liste med tags ind i find_all metode. F.eks. Skraber blokblokken nedenfor indholdet af til , h2 , og titel tags:

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)

Sådan skraber du en webside ved hjælp af id'et og klassens navn

Efter at have inspiceret et websted med DevTools lader det dig vide mere om id- og klasseattributter, der indeholder hvert element i dets DOM. Når du har denne information, kan du skrabe den webside ved hjælp af denne metode. Det er nyttigt, når indholdet af en målkomponent løkker ud af databasen.

Du kan bruge Find metode til id- og klasseskrabere. I modsætning til find_all metode, der returnerer et gentageligt objekt, Find metode fungerer på et enkelt, ikke-iterbart mål, som er id I dette tilfælde. Så du behøver ikke bruge til sløjfe med det.

Lad os se på et eksempel på, hvordan du kan skrabe indholdet på en side herunder ved hjælp af id'et:

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 at gøre dette for et klassenavn skal du erstatte id med klasse . Dog skrive klasse resulterer direkte i syntaksforvirring, da Python ser det som et søgeord. For at omgå denne fejl skal du skrive en understregning foran klassen som denne: klasse_ .

I det væsentlige bliver linjen, der indeholder id'et:

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

Du kan dog også skrabe en webside ved at kalde et bestemt tagnavn med tilhørende id eller klasse:

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

Sådan laver du en genanvendelig skraber med smuk suppe

Du kan oprette en klasse og sammensætte al den tidligere kode til en funktion i denne klasse for at lave en genanvendelig skraber, der får indholdet af nogle tags og deres id'er. Vi kan gøre dette ved at oprette en funktion, der accepterer fem argumenter: en URL, to tagnavne og deres tilsvarende id'er eller klasser.

Antag, at du vil skrabe prisen på skjorter fra et e-handelswebsted. Eksempelskraberklassen nedenfor udtrækker pris- og skjorte -tags med deres tilsvarende id'er eller klasser og returnerer den derefter som en Pandas -dataramme med 'Pris' og Shirt_name som kolonnenavne.

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!')

Den skraber, du lige har lavet, er et modul, der kan genbruges, og du kan importere og bruge det i en anden Python -fil. For at ringe til skrabe funktion fra sin klasse, bruger du scrapeit.scrape ('Website URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Hvis du ikke angiver webadressen og andre parametre, vises andet erklæring beder dig om at gøre det.

Hvis du vil bruge denne scaper i en anden Python -fil, kan du importere den sådan:

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

Bemærk: scraper_module er navnet på Python -filen, der indeholder scraper -klassen.

Du kan også kontrollere Smuk suppe dokumentation hvis du vil dykke dybere ned i, hvordan du bedst kan udnytte det.

Smuk suppe er et værdifuldt værktøj til webskrabning

Beautiful Soup er en kraftfuld Python -skærmskraber, der giver dig kontrol over, hvordan dine data kommer igennem under skrabning. Det er et værdifuldt forretningsværktøj, da det kan give dig adgang til konkurrentens webdata som priser, markedstendenser og mere.

windows 10 wifi vil ikke oprette forbindelse

Selvom vi har lavet en tagskraber i denne artikel, kan du stadig lege med dette kraftfulde Python -bibliotek for at lave mere nyttige skrabeværktøjer.

Del Del Tweet E -mail De bedste webskrabningsværktøjer online

Har du brug for at indsamle data fra websteder til analytiske formål? Disse webskrabningsværktøjer gør det let.

Læs Næste
Relaterede emner
  • Programmering
  • Python
Om forfatteren Idisou Omisola(94 artikler udgivet)

Idowu brænder for alt smart teknologi og produktivitet. I fritiden leger han med kodning og skifter til skakbrættet, når han keder sig, men han elsker også at bryde væk fra rutinen en gang imellem. Hans passion for at vise folk vejen rundt om moderne teknologi motiverer ham til at skrive mere.

Mere fra Idowu Omisola

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere