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 tutorialartikel over Beautiful Soup Python 3 en beautifulsoup4 , de nieuwste versie van Beautiful Soup. Zorg ervoor dat u een virtuele Python-omgeving maakt om uw project en de bijbehorende pakketten te isoleren van die op uw lokale machine.

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 het 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 apt-get install python3-bs4 uit te voeren .

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 opdracht pip install requests uit via de terminal.

Om de XML- parserbibliotheek te gebruiken, voer je pip install lxml uit om het te installeren.

Inspecteer de webpagina die u wilt schrapen

Voordat u een website schrapt die u niet kent, 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 Chrome DevTools te gebruiken 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 en klaar hebt, open je een voorkeurscode-editor en maak je een nieuw Python-bestand, en geef je het een gekozen naam. U kunt echter ook gebruikmaken 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 is geslaagd. 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 het get- verzoek hebt ontvangen, geeft u deze door aan Beautiful Soup, die 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 zijn inhoud.

Je kunt ook een meer uitgelijnde versie van de DOM krijgen door de prettify- methode te gebruiken. 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())

Je kunt ook de pure inhoud van een webpagina krijgen zonder het element te laden met de .text- methode:

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

De inhoud van een webpagina 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 kunt krijgen.

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

In het bovenstaande codefragment retourneert soup.h2 het eerste h2- element van de webpagina en negeert de rest. Om alle h2- elementen te laden , kunt u de ingebouwde functie find_all en de for- lus van Python gebruiken:

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 retourneert alle h2- elementen en hun inhoud. U kunt de inhoud echter ophalen zonder de tag te laden met behulp van de .string- 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 dat u hoeft te doen, is de h2- tag vervangen door de tag die u leuk vindt.

U kunt echter ook meer tags schrapen door een lijst met tags door te geven aan de find_all- methode. Het onderstaande codeblok schraapt bijvoorbeeld de inhoud van a , h2 en title- 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)

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 vindmethode gebruiken voor de id- en klassenschrapers. In tegenstelling tot de methode find_all die een itereerbaar object retourneert, werkt de methode find op een enkel, niet-itereerbaar doel, wat in dit geval de id is. U hoeft er dus geen for- lus voor te gebruiken .

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 voor een klassenaam te doen, vervangt u de id door class . Het schrijven van klasse resulteert echter direct in syntaxisverwarring, aangezien Python het als een sleutelwoord ziet. Om die fout te omzeilen, moet je een onderstrepingsteken voor de klas schrijven, zoals dit: class_ .

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 je panda's pip installeert 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 scrape- functie vanuit zijn klasse aan te roepen , gebruikt u scrapeit.scrape('Website URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Als u de URL en andere parameters niet opgeeft, wordt u in de else- instructie gevraagd 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.

Je kunt ook de Beautiful Soup-documentatie raadplegen 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.

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


Python gebruiken als opdrachtregelcalculator

Python gebruiken als opdrachtregelcalculator

Hoewel u een grafische rekenmachine op uw computer kunt gebruiken, kan de Python-programmeertaalinterpreter ook dienst doen als bureaurekenmachine. Het is zo'n populaire hardloopgrap in de Python-gemeenschap dat het wordt genoemd in de officiële tutorial. Hier leest u hoe u Python als rekenmachine kunt gebruiken.

De 8 beste Java-blogs voor programmeurs

De 8 beste Java-blogs voor programmeurs

Als programmeur moet je uitdagingen aangaan om te overleven en wonderen te bouwen op het gebied van ontwikkeling of programmeren. Als u dus een geavanceerde programmeertaal wilt leren om uw carrièrevaardigheden te verbeteren, is Java een van de beste vooruitzichten die er zijn.

7 essentiële commandos om aan de slag te gaan met Python voor beginners

7 essentiële commandos om aan de slag te gaan met Python voor beginners

Het leren van een nieuwe programmeertaal zoals Python wordt moeiteloos als je een uitgebreid stappenplan hebt waarin wordt beschreven welke concepten je als beginner moet leren en hoe je verder kunt komen om de volgende mijlpaal te bereiken. Zelfs gevorderde programmeurs zouden hun basis regelmatig moeten opfrissen om een ​​solide basis voor zichzelf op te bouwen.

Responsieve webontwerpprincipes

Responsieve webontwerpprincipes

Tegenwoordig is het gebruikelijk om een ​​website of app te bouwen die de gebruikersinterface aanpast, afhankelijk van de browser of het apparaat. Er zijn twee benaderingen om dit doel te bereiken. De eerste omvat het maken van verschillende versies van uw website of app voor verschillende apparaten. Maar het is inefficiënt en kan leiden tot onvoorspelbare fouten.

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Werken met getallen is een integraal onderdeel van programmeren. Elke programmeertaal biedt ondersteuning om getallen op veel verschillende manieren te manipuleren. In dit artikel leert u hoe u het totale aantal cijfers in een geheel getal kunt vinden met behulp van iteratieve, op logs gebaseerde en op tekenreeksen gebaseerde benaderingen.

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

Tweets insluiten in uw WordPress-berichten

Tweets insluiten in uw WordPress-berichten

Het insluiten van services van derden in uw WordPress-berichten is een opwindende manier om de interesse van een bezoeker te wekken. Ingesloten inhoud biedt ook visuele aanwijzingen die het scannen gemakkelijker maken. WordPress heeft het toevoegen van dit soort inhoud eenvoudig gemaakt.

Hoe de map Node Modules te verwijderen met npkill

Hoe de map Node Modules te verwijderen met npkill

Node.js is een JavaScript-runtimeomgeving waarmee u JavaScript buiten webbrowsers kunt uitvoeren, waardoor het een populaire keuze is voor het ontwikkelen van allerlei soorten toepassingen. Een deel van zijn populariteit is te danken aan de overvloed aan NPM-pakketten die er zijn om de ontwikkelaarservaring te vergemakkelijken.

Hoe u uw eerste Solidity-code schrijft en compileert

Hoe u uw eerste Solidity-code schrijft en compileert

Solidity is de programmeertaal die wordt gebruikt door slimme contracten op de Ethereum-blockchain. Het is een statisch getypeerde, objectgeoriënteerde programmeertaal.

Top 5 badges die uw GitHub-repository een boost zullen geven

Top 5 badges die uw GitHub-repository een boost zullen geven

GitHub-badges kunnen de leesbaarheid van een repository vergroten door gebruikers een snelle manier te bieden om de repository-statistieken vast te leggen. Badges kunnen worden ingesloten in uw README.md om het belang en de noodzaak van uw project aan andere ontwikkelaars duidelijk te maken. Als gevolg hiervan krijgen lezers een heel snel idee van de repository door de bijgevoegde badges te controleren.

Wat is de Internationale Dag van de Programmeurs? 3 manieren om dit jaar te vieren

Wat is de Internationale Dag van de Programmeurs? 3 manieren om dit jaar te vieren

Internationale feestdagen zijn een leuke manier om erkenning te geven aan sociale zaken, historische dagen en respectieve carrières. International Programmers' Day viert de rol die programmeurs spelen om het dagelijks leven te verbeteren. De beschaafde wereld waarin we leven is een product van het harde werk van programmeurs.

Hoe werkt de methode Python String format()? 10 voorbeelden

Hoe werkt de methode Python String format()? 10 voorbeelden

Of het nu gaat om een ​​databasequery of resultaten van wiskundige bewerkingen, de Python-tekenreeksindelingsmethode biedt een meer dynamische en aantrekkelijke manier om resultaten aan een gebruiker te presenteren.

Visual Studio 2022 vs. 2019: moet u nu upgraden? uitgelegd

Visual Studio 2022 vs. 2019: moet u nu upgraden? uitgelegd

Eerder dit jaar bracht Microsoft de preview-versie van Visual Studio 2022 uit in de wilde programmeerwereld. Dit is goed nieuws! Het is een extreem populaire IDE, maar aan een opknapbeurt of misschien zelfs een revisie toe, gezien het tempo van de veranderingen in het DevOps-ecosysteem waarin het gedijt.

Een eenvoudige introductie tot softwarestatistieken

Een eenvoudige introductie tot softwarestatistieken

Softwarestatistieken zijn metingen die worden gebruikt om verschillende aspecten van uw software te kwantificeren. Deze aspecten kunnen variëren van de kosten, kwaliteit en efficiëntie van het ontwikkelteam.

Flask of CherryPy: welk Python-framework moet je gebruiken?

Flask of CherryPy: welk Python-framework moet je gebruiken?

Als je een Python-ontwikkelaar bent, kun je enorm profiteren van de reeks beschikbare frameworks. Terwijl sommige kaders het meest geschikt zijn voor grote ecosystemen, zijn andere gespecialiseerd in het dienen van specifieke ontwikkelingsdoelen. Lees verder om de basisfuncties, het gebruik en de verschillen tussen twee Python-frameworks te leren: Flask en CherryPy.

N-cijferige perfecte kubussen en vierkanten vinden met Python, C++ en JavaScript

N-cijferige perfecte kubussen en vierkanten vinden met Python, C++ en JavaScript

Veel programmeurs houden ervan om lastige wiskundige problemen op te lossen met behulp van code. Het helpt de geest te scherpen en het probleemoplossend vermogen te verbeteren. In dit artikel leer je hoe je de kleinste en grootste n-cijferige perfecte vierkanten en kubussen kunt vinden met Python, C++ en JavaScript. Elk voorbeeld bevat ook voorbeelduitvoer voor verschillende waarden.

Hoe de Python if-instructie te gebruiken?

Hoe de Python if-instructie te gebruiken?

Het if-statement is de drijvende kracht achter logisch programmeren. Als gevolg hiervan is een beter begrip van Pythons een belangrijke toevoeging aan je Python-programmeervaardigheden.

Coderen is niet voor iedereen: 9 technische banen die je zonder kunt krijgen

Coderen is niet voor iedereen: 9 technische banen die je zonder kunt krijgen

Technologie is zonder twijfel de industrie van de toekomst. Als je een van de miljoenen jonge volwassenen bent die op het punt staan ​​om in de eerste fase van je carrière te duiken, vraag je je misschien af ​​wat je moet doen als je niet van coderen houdt.

Hoe u uw virtuele Python-omgevingen effectief kunt maken en beheren

Hoe u uw virtuele Python-omgevingen effectief kunt maken en beheren

U kunt een real-life project in Python niet met succes voltooien zonder een virtuele omgeving. Tools zoals virtualenvwrapper en virtualenv zijn gebruikelijk voor het maken en beheren van virtuele omgevingen voor webontwikkeling, terwijl anaconda veel wordt gebruikt door datawetenschappers.

Het CSS Box-model uitgelegd met voorbeelden

Het CSS Box-model uitgelegd met voorbeelden

Als u van plan bent een geweldige webpagina-indeling te maken, moet u weten over marges, randen, opvulling en inhoud. Elk element in webdesign, of het nu een afbeelding of tekst is, gebruikt een kader met deze eigenschappen. Je kunt eenvoudig complexe lay-outs bouwen door te spelen met het doosmodel. In dit artikel zullen we het CSS Box-model ontleden en laten zien hoe u deze eigenschappen kunt gebruiken met praktische voorbeelden.

Python gebruiken als opdrachtregelcalculator

Python gebruiken als opdrachtregelcalculator

Hoewel u een grafische rekenmachine op uw computer kunt gebruiken, kan de Python-programmeertaalinterpreter ook dienst doen als bureaurekenmachine. Het is zo'n populaire hardloopgrap in de Python-gemeenschap dat het wordt genoemd in de officiële tutorial. Hier leest u hoe u Python als rekenmachine kunt gebruiken.

De 8 beste Java-blogs voor programmeurs

De 8 beste Java-blogs voor programmeurs

Als programmeur moet je uitdagingen aangaan om te overleven en wonderen te bouwen op het gebied van ontwikkeling of programmeren. Als u dus een geavanceerde programmeertaal wilt leren om uw carrièrevaardigheden te verbeteren, is Java een van de beste vooruitzichten die er zijn.

7 essentiële commandos om aan de slag te gaan met Python voor beginners

7 essentiële commandos om aan de slag te gaan met Python voor beginners

Het leren van een nieuwe programmeertaal zoals Python wordt moeiteloos als je een uitgebreid stappenplan hebt waarin wordt beschreven welke concepten je als beginner moet leren en hoe je verder kunt komen om de volgende mijlpaal te bereiken. Zelfs gevorderde programmeurs zouden hun basis regelmatig moeten opfrissen om een ​​solide basis voor zichzelf op te bouwen.

Responsieve webontwerpprincipes

Responsieve webontwerpprincipes

Tegenwoordig is het gebruikelijk om een ​​website of app te bouwen die de gebruikersinterface aanpast, afhankelijk van de browser of het apparaat. Er zijn twee benaderingen om dit doel te bereiken. De eerste omvat het maken van verschillende versies van uw website of app voor verschillende apparaten. Maar het is inefficiënt en kan leiden tot onvoorspelbare fouten.

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Werken met getallen is een integraal onderdeel van programmeren. Elke programmeertaal biedt ondersteuning om getallen op veel verschillende manieren te manipuleren. In dit artikel leert u hoe u het totale aantal cijfers in een geheel getal kunt vinden met behulp van iteratieve, op logs gebaseerde en op tekenreeksen gebaseerde benaderingen.

De 9 beste Docker-alternatieven voor containerbeheer

De 9 beste Docker-alternatieven voor containerbeheer

Containers zijn zeer nuttig voor softwareontwikkeling, implementatie en beheer in een virtuele omgeving. Docker is handig in het containerisatieproces, maar het is niet het enige platform dat er is. Als u op zoek bent naar alternatieven voor Docker, hoeft u niet verder te zoeken. Deze lijst toont enkele veelzijdige en efficiënte Docker-alternatieven die u in uw volgende project kunt gebruiken.

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

Tweets insluiten in uw WordPress-berichten

Tweets insluiten in uw WordPress-berichten

Het insluiten van services van derden in uw WordPress-berichten is een opwindende manier om de interesse van een bezoeker te wekken. Ingesloten inhoud biedt ook visuele aanwijzingen die het scannen gemakkelijker maken. WordPress heeft het toevoegen van dit soort inhoud eenvoudig gemaakt.

Hoe de map Node Modules te verwijderen met npkill

Hoe de map Node Modules te verwijderen met npkill

Node.js is een JavaScript-runtimeomgeving waarmee u JavaScript buiten webbrowsers kunt uitvoeren, waardoor het een populaire keuze is voor het ontwikkelen van allerlei soorten toepassingen. Een deel van zijn populariteit is te danken aan de overvloed aan NPM-pakketten die er zijn om de ontwikkelaarservaring te vergemakkelijken.

Hoe u uw eerste Solidity-code schrijft en compileert

Hoe u uw eerste Solidity-code schrijft en compileert

Solidity is de programmeertaal die wordt gebruikt door slimme contracten op de Ethereum-blockchain. Het is een statisch getypeerde, objectgeoriënteerde programmeertaal.