Nyheter i Android, Telefoner, Prylar Och Recensioner

Skrapa en webbplats med denna vackra Soup Python Tutorial

Beautiful Soup är ett Python-bibliotek med öppen källkod. Den använder navigerande parsers för att skrapa innehållet i XML- och HTML-filer. Du behöver data för flera analytiska ändamål. Men om du är ny på Python och webbskrapning, är Pythons Beautiful Soup-bibliotek värt att testa för ett webbskrapningsprojekt.

Med Pythons open-source Beautiful Soup-bibliotek kan du få data genom att skrapa någon del eller element av en webbsida med maximal kontroll över processen. I den här artikeln tittar vi på hur du kan använda Beautiful Soup för att skrapa en webbplats.

Hur man installerar vacker soppa och kommer igång med den

Innan vi fortsätter, i den här handledningsartikeln om Beautiful Soup, kommer vi att använda Python 3 och vacker soppa4, den senaste versionen av Beautiful Soup. Se till att du skapar en virtuell Python-miljö för att isolera ditt projekt och dess paket från de på din lokala dator.

För att komma igång måste du installera Beautiful Soup-biblioteket i din virtuella miljö. Beautiful Soup finns tillgängligt som ett PyPi-paket för alla operativsystem, så du kan installera det med pip installera beautifulsoup4 kommandot via terminalen.

Men om du använder Debian eller Linux fungerar kommandot ovan fortfarande, men du kan installera det med pakethanteraren genom att köra apt-get installera python3-bs4.

Beautiful Soup skrapar inte webbadresser direkt. Det fungerar bara med färdiga HTML- eller XML-filer. Det betyder att du inte kan skicka en URL direkt in i den. För att lösa det problemet måste du få URL:en till målwebbplatsen med Pythons förfrågningsbibliotek innan du matar den till Beautiful Soup.

För att göra det biblioteket tillgängligt för din skrapa, kör pip-installationsförfrågningar kommandot via terminalen.

Kör för att använda XML-parserbiblioteket pip installera lxml för att installera den.

Inspektera webbsidan du vill skrapa

Innan du skrapar en webbplats som du inte är bekant med är en bästa praxis att inspektera dess delar. Du kan göra detta genom att byta webbläsare till utvecklarläget. Det är ganska enkelt att använda Chrome DevTools om du använder Google Chrome.

Det är dock nödvändigt att inspektera en webbsida för att veta mer om dess HTML-taggar, attribut, klasser och ID. Att göra det avslöjar kärnelementen i en webbsida och dess innehållstyper.

Det hjälper dig också att utveckla de bästa strategierna du kan använda för att få exakt den data du vill ha från en webbplats och hur du kan få den.

Hur man skrapar en webbplatss data med vacker soppa

Nu när du har allt klart, öppna en föredragen kodredigerare och skapa en ny Python-fil, ge den ett valt namn. Men du kan också använda dig av webbaserade IDE:er som Jupyter Notebook om du inte är bekant med att köra Python via kommandoraden.

Relaterad  8 populära miljösajter för att lära dig mer om bevarande

Importera sedan de nödvändiga biblioteken:

from bs4 import BeautifulSoup
import requests

Först och främst, låt oss se hur förfrågningsbiblioteket fungerar:

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

När du kör koden ovan returnerar den en 200-status, vilket indikerar att din begäran är framgångsrik. Annars får du en 400-status eller någon annan felstatus som indikerar en misslyckad GET-begäran.

Kom ihåg att alltid ersätta webbplatsens URL inom parentes med din måladress.

När du får webbplatsen med skaffa sig begäran skickar du det sedan vidare till Beautiful Soup, som nu kan läsa innehållet som HTML- eller XML-filer med sin inbyggda XML- eller HTML-tolkare, beroende på ditt valda format.

Ta en titt på nästa kodavsnitt för att se hur du gör detta med HTML-tolken:

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

Koden ovan returnerar hela DOM för en webbsida med dess innehåll.

Du kan också få en mer anpassad version av DOM genom att använda försköna metod. Du kan prova detta för att 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 också få det rena innehållet på en webbsida utan att ladda dess element med .text metod:

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

Hur man skrapar innehållet på en webbsida efter taggnamnet

Du kan också skrapa innehållet i en viss tagg med Beautiful Soup. För att göra detta måste du inkludera namnet på måltaggen i din begäran om Beautiful Soup-skrapa.

Låt oss till exempel se hur du kan få innehållet i h2 taggar för en webbsida.

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

I kodavsnittet ovan, soppa.h2 returnerar den första h2 element på webbsidan och ignorerar resten. För att ladda alla h2 element kan du använda hitta alla inbyggd funktion och för loop av Python:

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)

Det kodblocket returnerar allt h2 element och deras innehåll. Du kan dock få innehållet utan att ladda taggen genom att använda .sträng metod:

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 använda den här metoden för alla HTML-taggar. Allt du behöver göra är att byta ut h2 tagga med den du gillar.

Men du kan också skrapa fler taggar genom att skicka en lista med taggar till hitta alla metod. Till exempel skrapar kodblocket nedan innehållet i a, h2, och titel taggar:

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)

Hur man skrapar en webbsida med ID och klassnamn

Efter att ha inspekterat en webbplats med DevTools, låter den dig veta mer om id- och klassattributen som innehåller varje element i dess DOM. När du har den informationen kan du skrapa den webbsidan med den här metoden. Det är användbart när innehållet i en målkomponent loopar ut från databasen.

Relaterad  AUN MINI Projector D60S recension: Kommer med 1280x720P Android WIFI Bluetooth LED (Pris: $131,99)

Du kan använda hitta metod för id- och klassskrapor. till skillnad från hitta alla metod som returnerar ett iterbart objekt, den hitta metoden fungerar på ett enda, icke-iterbart mål, vilket är id I detta fall. Så du behöver inte använda för slinga med den.

Låt oss titta på ett exempel på hur du kan skrapa innehållet på en sida nedan med hjälp av ID:t:

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)

För att göra detta för ett klassnamn, ersätt id med klass. Dock skriva klass leder direkt till syntaxförvirring eftersom Python ser det som ett nyckelord. För att kringgå det felet måste du skriva ett understreck framför klassen så här: klass_.

I huvudsak blir raden som innehåller id:t:

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

Men du kan också skrapa en webbsida genom att anropa ett visst taggnamn med dess motsvarande id eller klass:

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

Hur man gör en återanvändbar skrapa med vacker soppa

Du kan skapa en klass och sätta ihop all tidigare kod till en funktion i den klassen för att göra en återanvändbar skrapa som får innehållet i vissa taggar och deras ID. Vi kan göra detta genom att skapa en funktion som accepterar fem argument: en URL, två taggnamn och deras motsvarande ID eller klasser.

Anta att du vill skrapa priset på skjortor från en e-handelswebbplats. Scraperklassen nedan extraherar pris- och skjorttaggarna med motsvarande id eller klasser och returnerar den sedan som en Pandas-dataram med ‘Price’ och Shirt_name som kolumnnamn.

Se till att du pip installera pandor via terminalen om du inte redan 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!')

Skraparen du just har gjort är en återanvändbar modul och du kan importera och använda den i en annan Python-fil. Att ringa till skrapa funktion från sin klass, du använder scrapeit.scrape(‘Webbplats URL’, ‘price_tag’, ‘price_id’, ‘shirt_tag’, ‘shirt_id’). Om du inte anger webbadressen och andra parametrar, annan uttalandet uppmanar dig att göra det.

Relaterad  LS-25 RC Drone Review – med dubbel kamera med förvaringsväska för 79,99 $ från TOMTOP

För att använda den scapern i en annan Python-fil kan du importera den så här:

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

Notera: scraper_module är namnet på Python-filen som innehåller scraper-klassen.

Du kan också kolla i Beautiful Soup-dokumentationen om du vill dyka djupare in i hur du kan använda den på bästa sätt.

Beautiful Soup är en kraftfull Python-skärmskrapa som ger dig kontroll över hur din data kommer igenom under skrapning. Det är ett värdefullt affärsverktyg, eftersom det kan ge dig tillgång till konkurrentens webbdata som prissättning, marknadstrender och mer.

Även om vi har gjort en taggskrapa i den här artikeln, kan du fortfarande leka med detta kraftfulla Python-bibliotek för att göra mer användbara skrapverktyg.

Om författaren

Idowu Omisola (124 artiklar publicerade)

Idowu brinner för allt smart teknik och produktivitet. I hans free tid, han leker med kodning och byter till schackbrädet när han har tråkigt, men han älskar också att bryta sig loss från rutinen då och då. Hans passion för att visa människor vägen runt modern teknik motiverar honom att skriva mer.

Mer från Idowu Omisola

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera