Schraap een website met deze prachtige Soup Python-zelfstudie

Schraap een website met deze prachtige Soup Python-zelfstudie

Beautiful Soup is een open-source Python-bibliotheek. Het gebruikt navigatieparsers om de inhoud van XML- en HTML-bestanden te schrapen. U heeft gegevens nodig voor verschillende analytische doeleinden. Als Python en webscraping echter nieuw voor u zijn, is de Beautiful Soup-bibliotheek van Python het proberen waard voor een webscraping-project.





Met Python's open-source Beautiful Soup-bibliotheek kun je gegevens verkrijgen door elk deel of element van een webpagina te schrapen met maximale controle over het proces. In dit artikel bekijken we hoe je Beautiful Soup kunt gebruiken om een ​​website te scrapen.





Hoe Beautiful Soup te installeren en ermee aan de slag te gaan?

Voordat we verder gaan, gebruiken we in dit zelfstudieartikel over mooie soep Python 3 en mooiesoep4 , de nieuwste versie van Beautiful Soup. Zorg ervoor dat u een virtuele Python-omgeving maken om uw project en zijn pakketten te isoleren van die op uw lokale computer.





hoe penselen in procreate te importeren

Om aan de slag te gaan, moet u de Beautiful Soup-bibliotheek in uw virtuele omgeving installeren. Beautiful Soup is beschikbaar als PyPi-pakket voor alle besturingssystemen, dus u kunt het installeren met de pip install beautifulsoup4 commando via de terminal.

Als u echter Debian of Linux gebruikt, werkt het bovenstaande commando nog steeds, maar u kunt het installeren met de pakketbeheerder door het uit te voeren apt-get install python3-bs4 .



Beautiful Soup schrapt URL's niet rechtstreeks. Het werkt alleen met kant-en-klare HTML- of XML-bestanden. Dat betekent dat u er niet rechtstreeks een URL in kunt doorgeven. Om dat probleem op te lossen, moet u de URL van de doelwebsite ophalen met de verzoekbibliotheek van Python voordat u deze naar Beautiful Soup voert.

Om die bibliotheek beschikbaar te maken voor uw scraper, voert u de pip installatieverzoeken commando via de terminal.





Om de XML-parserbibliotheek te gebruiken, voert u pip installeer lxml om het te installeren.

Inspecteer de webpagina die u wilt schrapen

Voordat u een website schrapt waarmee u niet bekend bent, is het een goede gewoonte om de elementen ervan te inspecteren. U kunt dit doen door uw browser naar de ontwikkelaarsmodus te schakelen. Het is vrij eenvoudig om gebruik Chrome DevTools als u Google Chrome gebruikt.





Het is echter noodzakelijk om een ​​webpagina te inspecteren om meer te weten te komen over de HTML-tags, attributen, klassen en id's. Door dat te doen, worden de kernelementen van een webpagina en de inhoudstypen ervan blootgelegd.

Het helpt u ook bij het ontwikkelen van de beste strategieën die u kunt gebruiken om de exacte gegevens te krijgen die u van een website wilt en hoe u deze kunt krijgen.

Hoe de gegevens van een website te schrapen met mooie soep?

Nu je alles klaar hebt, open je een voorkeurscode-editor en maak je een nieuw Python-bestand, met een gekozen naam. U kunt echter ook gebruik maken van webgebaseerde IDE's zoals Jupyter Notebook als u niet bekend bent met het uitvoeren van Python via de opdrachtregel.

Importeer vervolgens de benodigde bibliotheken:

from bs4 import BeautifulSoup
import requests

Laten we eerst eens kijken hoe de bibliotheek met verzoeken werkt:

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

Wanneer u de bovenstaande code uitvoert, retourneert deze een 200-status, wat aangeeft dat uw verzoek succesvol is. Anders krijgt u een 400-status of enkele andere foutstatussen die wijzen op een mislukt GET-verzoek.

Vergeet niet om altijd de URL van de website tussen haakjes te vervangen door uw doel-URL.

Zodra u de website met de krijgen verzoek, geeft u het vervolgens door aan Beautiful Soup, dat de inhoud nu kan lezen als HTML- of XML-bestanden met behulp van de ingebouwde XML- of HTML-parser, afhankelijk van het door u gekozen formaat.

Bekijk dit volgende codefragment om te zien hoe u dit doet met de HTML-parser:

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

De bovenstaande code retourneert de volledige DOM van een webpagina met de inhoud ervan.

Je kunt ook een meer uitgelijnde versie van de DOM krijgen door de mooier maken methode. U kunt dit uitproberen om de uitvoer te zien:

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

U kunt ook de pure inhoud van een webpagina krijgen zonder het element te laden met de .tekst methode:

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

Hoe de inhoud van een webpagina te schrapen op de tagnaam

Je kunt ook de inhoud in een bepaalde tag schrapen met Beautiful Soup. Om dit te doen, moet u de naam van de doeltag opnemen in uw Beautiful Soup-schraperverzoek.

Laten we bijvoorbeeld eens kijken hoe u de inhoud in de h2 tags van een webpagina.

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

In het codefragment hierboven, soep.h2 geeft de eerste terug h2 element van de webpagina en negeert de rest. Om alle . te laden h2 elementen, kunt u de vind alle ingebouwde functie en de voor lus van Python:

vankyo matrixpad z4 10-inch tablet
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)

Dat codeblok geeft alles terug h2 elementen en hun inhoud. U kunt de inhoud echter ophalen zonder de tag te laden met behulp van de .snaar methode:

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)

U kunt deze methode voor elke HTML-tag gebruiken. Het enige wat u hoeft te doen is de h2 tag met degene die je leuk vindt.

U kunt echter ook meer tags schrapen door een lijst met tags door te geven aan de vind alle methode. Het onderstaande codeblok schraapt bijvoorbeeld de inhoud van tot , h2 , en titel labels:

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)

Een webpagina schrapen met behulp van de ID en klassenaam

Na het inspecteren van een website met de DevTools, laat het je meer weten over de id- en class-attributen die elk element in zijn DOM bevatten. Zodra u dat stukje informatie heeft, kunt u die webpagina met deze methode schrapen. Het is handig wanneer de inhoud van een doelcomponent uit de database loopt.

U kunt de vind methode voor de id- en klassenschrapers. In tegenstelling tot de vind alle methode die een itereerbaar object retourneert, de vind methode werkt op een enkel, niet-itereerbaar doel, dat is de ID kaart in dit geval. U hoeft de dus niet te gebruiken voor lus ermee.

Laten we eens kijken naar een voorbeeld van hoe u de inhoud van een pagina hieronder kunt schrapen met behulp van de 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)

Om dit te doen voor een klassenaam, vervangt u de ID kaart met klas . Echter, schrijven klas resulteert direct in syntaxisverwarring omdat Python het als een sleutelwoord ziet. Om die fout te omzeilen, moet je een onderstrepingsteken voor de klas schrijven, zoals dit: klas_ .

In wezen wordt de regel met de id:

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

U kunt echter ook een webpagina schrapen door een bepaalde tagnaam aan te roepen met de bijbehorende id of klasse:

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

Hoe maak je een herbruikbare schraper met mooie soep?

Je kunt een klasse maken en alle voorgaande code samenvoegen tot een functie in die klasse om een ​​herbruikbare schraper te maken die de inhoud van sommige tags en hun id's krijgt. We kunnen dit doen door een functie te maken die vijf argumenten accepteert: een URL, twee tagnamen en de bijbehorende id's of klassen.

Stel dat u de prijs van overhemden van een e-commerce website wilt schrappen. De onderstaande scraper-klasse haalt de prijs- en shirt-tags met hun corresponderende id's of klassen en retourneert deze vervolgens als een Pandas-gegevensframe met 'Price' en Shirt_name als de kolomnamen.

Zorg ervoor dat u pip installeer panda's via de terminal als je dat nog niet hebt gedaan.

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

De schraper die u zojuist hebt gemaakt, is een herbruikbare module en u kunt deze importeren en gebruiken in een ander Python-bestand. om de . te bellen schrapen functie uit zijn klasse, gebruik je scrapeit.scrape('Website-URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Als u de URL en andere parameters niet opgeeft, wordt de anders verklaring vraagt ​​u dit te doen.

Om die scaper in een ander Python-bestand te gebruiken, kun je het als volgt importeren:

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

Opmerking: scraper_module is de naam van het Python-bestand dat de scraper-klasse bevat.

U kunt ook de Prachtige soepdocumentatie als je dieper wilt ingaan op hoe je er het beste gebruik van kunt maken.

Beautiful Soup is een waardevol hulpmiddel voor het schrapen van websites

Beautiful Soup is een krachtige Python-schermschraper die u controle geeft over hoe uw gegevens doorkomen tijdens het schrapen. Het is een waardevol zakelijk hulpmiddel, omdat het u toegang kan geven tot webgegevens van concurrenten, zoals prijzen, markttrends en meer.

website om gratis films te kijken zonder te downloaden

Hoewel we in dit artikel een tag-schraper hebben gemaakt, kun je nog steeds spelen met deze krachtige Python-bibliotheek om nuttigere scraping-tools te maken.

Deel Deel Tweeten E-mail De beste webscraping-tools online

Gegevens van websites verzamelen voor analytische doeleinden? Deze webscraping-tools maken het gemakkelijk.

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Python
Over de auteur Idisou Omisola(94 artikelen gepubliceerd)

Idowu is gepassioneerd door alles wat slimme technologie en productiviteit betreft. In zijn vrije tijd speelt hij met coderen en schakelt hij over naar het schaakbord als hij zich verveelt, maar hij vindt het ook heerlijk om af en toe uit de routine te stappen. Zijn passie om mensen de weg te wijzen in moderne technologie motiveert hem om meer te schrijven.

Meer van Idowu Omisola

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren