Skrapa en webbplats med denna vackra sopppythonhandledning

Skrapa en webbplats med denna vackra sopppythonhandledning

Beautiful Soup är ett Python-bibliotek med öppen källkod. Den använder navigeringsparare 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 vackra soppbibliotek 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 del av en webbsida med maximal kontroll över processen. I den här artikeln tittar vi på hur du kan använda vacker soppa för att skrapa en webbplats.





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

Innan vi fortsätter, i denna vackra soppartikel, använder vi Python 3 och vacker soppa 4 , den senaste versionen av Beautiful Soup. Se till att du skapa en virtuell Python -miljö att isolera ditt projekt och dess paket från dem på din lokala maskin.





äppelklocka i aluminium eller rostfritt stål

För att komma igång måste du installera det vackra soppbiblioteket i din virtuella miljö. Beautiful Soup finns som ett PyPi -paket för alla operativsystem, så att du kan installera det med pip installera beautifulsoup4 kommando 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 install python3-bs4 .



Vacker soppa skrapar inte webbadresser direkt. Det fungerar bara med färdiga HTML- eller XML-filer. Det betyder att du inte kan skicka en URL direkt till den. För att lösa det problemet måste du skaffa webbadressen 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 kommando via terminalen.





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

Inspektera webbsidan du vill skrapa

Innan du skrapar någon webbplats som du inte är bekant med, är en bästa praxis att inspektera dess element. Du kan göra detta genom att växla din webbläsare till utvecklarens läge. Det är ganska lätt att använd 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: er. Att göra det avslöjar kärnelementen på 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å exakta data du vill ha från en webbplats och hur du kan få den.

Hur man skrapar en webbplatsens data med vacker soppa

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

Importera sedan de nödvändiga biblioteken:

from bs4 import BeautifulSoup
import requests

Låt oss först 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 lyckades. Annars får du en 400 -status eller andra felstatusar 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 den vidare till Beautiful Soup, som nu kan läsa innehållet som HTML- eller XML-filer med sin inbyggda XML- eller HTML-parser, beroende på ditt valda format.

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

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 på 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 dess utgång:

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 med taggnamnet

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

Låt oss till exempel se hur du kan få innehållet i h2 taggar på 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:

varför kopplar min xbox one -controller bort
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 med hjälp av .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 till , 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 kan du 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 loopas ut från databasen.

Du kan använda hitta metod för id- och klassskraporna. till skillnad från hitta alla metod som returnerar ett iterabelt objekt, 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 det.

Låt oss titta på ett exempel på hur du kan skrapa innehållet på en sida nedan med hjälp 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)

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

I huvudsak blir raden som innehåller id:

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

Du kan dock också skrapa en webbsida genom att ringa ett visst taggnamn med 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 den tidigare koden till en funktion i den klassen för att skapa en återanvändbar skrapa som hämtar innehållet i några taggar och deras id: er. Vi kan göra detta genom att skapa en funktion som accepterar fem argument: en URL, två taggnamn och deras motsvarande id eller klasser.

Antag att du vill skrapa priset på skjortor från en e-handelswebbplats. Exempelskrapklassen nedan extraherar pris- och skjorttaggarna med motsvarande id eller klasser och returnerar den sedan som en Pandas -dataram med 'Pris' och Shirt_name som kolumnnamnen.

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

Skrapan du just 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, använder du scrapeit.scrape ('Webbplats -URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Om du inte anger webbadressen och andra parametrar visas annan uttalande uppmanar dig att göra det.

För att använda den scaper 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 skrapklassen.

Du kan också kontrollera Vacker soppdokumentation om du vill fördjupa dig i hur du kan utnyttja det på bästa sätt.

Vacker soppa är ett värdefullt webbskrapverktyg

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

hur man gör en startbar dvd

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

Dela med sig Dela med sig Tweet E-post De bästa webbskrapningsverktygen online

Behöver du samla in data från webbplatser för analytiska ändamål? Dessa verktyg för webbskrapning gör det enkelt.

Läs Nästa
Relaterade ämnen
  • Programmering
  • Pytonorm
Om författaren Idisou Omisola(94 artiklar publicerade)

Idowu brinner för allt smart teknik och produktivitet. På fritiden leker han med kodning och byter till schackbrädet när han har tråkigt, men han älskar också att bryta sig från rutinen då och då. Hans passion för att visa människor vägen kring 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, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera