MooiSoep

Python BeautifulSoup-zelfstudie voor beginners

Python BeautifulSoup-zelfstudie voor beginners
Webscraping is van groot belang in de wereld van vandaag. Iedereen heeft gegevens nodig, uit verschillende bronnen, waaronder webpagina's. In dit artikel zullen we bekijken hoe je html kunt parseren met de beautifulsoup-bibliotheek. Het extraheren van de benodigde gegevens uit een heleboel alfabetten en symbolen, dankzij deze geweldige bibliotheek, is een stuk eenvoudiger geworden. BeautifulSoup geschreven in Python kan eenvoudig op uw machine worden geïnstalleerd met behulp van de pip-installatietool van Python. De volgende opdracht zou helpen om de bibliotheek te installeren:

pip installeer BeautifulSoup4

Om te controleren of de installatie is gelukt, activeert u de Python interactieve shell en importeert u BeautifulSoup. Als er geen fout verschijnt, betekent dit dat alles goed is gegaan.  Als je niet weet hoe je dat moet aanpakken, typ dan de volgende commando's in je terminal.

$ python
Python 3.5.2 (standaard, 14 september 2017, 22:51:06)
[GCC 5.4.0 20160609] op linux
Typ "help", "copyright", "credits" of "licentie" voor meer informatie.
>>> bs4 importeren

Om met de BeautifulSoup-bibliotheek te werken, moet u html doorgeven. Wanneer u met echte websites werkt, kunt u de html van een webpagina krijgen met behulp van de verzoekenbibliotheek. De installatie en het gebruik van de verzoekenbibliotheek valt buiten het bestek van dit artikel, maar u kunt uw weg vinden in de documentatie, het is vrij eenvoudig te gebruiken. Voor dit artikel gaan we gewoon html gebruiken in een python-string die we zouden noemen html.

html = """

Medewerkersprofiel



Naam:Dr Peter Parker

baan:Ingenieur voor machine learning

Telefoon:+12345678910





"""

Om beautifulsoup te gebruiken, importeren we het in de code met behulp van de onderstaande code:

van bs4 import BeautifulSoup

Dit zou BeautifulSoup in onze naamruimte introduceren en we kunnen het gebruiken bij het ontleden van onze string.

soep = BeautifulSoup(html, "lxml")

Nu, soep is een BeautifulSoup-object van het type bs4.BeautifulSoup en we kunnen alle BeautifulSoup-bewerkingen uitvoeren op de soepvariabele.

Laten we eens kijken naar enkele dingen die we nu met BeautifulSoup kunnen doen.

HET LELIJK, PRACHTIG MAKEN

Wanneer BeautifulSoup html ontleedt, is het meestal niet in de beste indeling. De afstand is behoorlijk afschuwelijk. De tags zijn moeilijk te vinden. Hier is een afbeelding om te laten zien hoe ze eruit zouden zien als je de soep:

Hier is echter een oplossing voor. De oplossing geeft de html de perfecte spatiëring, waardoor alles er goed uitziet. Deze oplossing heet terecht “mooier maken“.

Toegegeven, u kunt deze functie meestal niet gebruiken; er zijn echter momenten waarop u mogelijk geen toegang hebt tot de tool voor het inspecteren van elementen van een webbrowser. In die tijden van beperkte middelen, zou je de prettify-methode erg handig vinden.

Hier is hoe je het gebruikt:

soep.mooier maken()

De opmaak zou er goed uit zien, net als in de onderstaande afbeelding:

Wanneer je de prettify-methode op de soep toepast, is het resultaat niet langer een type bs4.MooiSoep. Het resultaat is nu type 'unicode'. Dit betekent dat je er geen andere BeautifulSoup-methoden op kunt toepassen, maar de soep zelf wordt niet beïnvloed, dus we zijn veilig.

ONZE FAVORIETE TAGS VINDEN

HTML bestaat uit tags. Het slaat al zijn gegevens erin op, en te midden van al die rommel liggen de gegevens die we nodig hebben. Dit betekent in feite dat wanneer we de juiste tags vinden, we kunnen krijgen wat we nodig hebben.

Dus hoe vinden we de juiste tags? We maken gebruik van de zoek- en vind_alle methoden van BeautifulSoup.

Zo werken ze:

De vind methode zoekt naar de eerste tag met de benodigde naam en retourneert een object van het type bs4.element.Label.

De vind alle methode zoekt daarentegen naar alle tags met de benodigde tagnaam en retourneert ze als een lijst van het type bs4.element.ResultaatSet. Alle items in de lijst zijn van het type bs4.element.Tag, zodat we de lijst kunnen indexeren en onze mooie soep-verkenning kunnen voortzetten.

Laten we eens wat code zien. Laten we alle div-tags zoeken:

soep.vinden(“div“)

We zouden het volgende resultaat krijgen:

Naam:Dr Peter Parker

Als u de html-variabele controleert, ziet u dat dit de eerste div-tag is.

soep.find_all(“div“)

We zouden het volgende resultaat krijgen:

[
Naam:Dr Peter Parker
,
baan:Ingenieur voor machine learning
,
Telefoon:+12345678910
,
,
]

Het geeft een lijst terug.  Als u bijvoorbeeld de derde div-tag wilt, voert u de volgende code uit:

soep.find_all(“div“)[2]

Het zou het volgende retourneren:

Telefoon:+12345678910

DE EIGENSCHAPPEN VAN ONZE FAVORIETE TAGS VINDEN

Nu we hebben gezien hoe we onze favoriete tags kunnen krijgen, hoe zit het met het verkrijgen van hun attributen??

Op dit punt denk je misschien: “Waar hebben we attributen voor nodig??“. Nou, vaak zullen de meeste gegevens die we nodig hebben e-mailadressen en websites zijn. Dit soort gegevens wordt meestal gehyperlinkt in webpagina's, met de links in het "href" -attribuut.

Wanneer we de benodigde tag hebben geëxtraheerd met behulp van de methoden find of find_all, kunnen we attributen krijgen door toe te passen attrs. Dit zou een woordenboek van het attribuut en zijn waarde retourneren.

Om bijvoorbeeld het e-mailkenmerk te krijgen, krijgen we de tags die de benodigde informatie omringen en doe het volgende:.

soep.find_all(“een“)[0].attrs

Wat het volgende resultaat zou opleveren:

'href': 'mailto:[email protected]'

Hetzelfde voor het websitekenmerk.

soep.find_all(“een“)[1].attrs

Wat het volgende resultaat zou opleveren:

'href': '
http://pparkerworks.com'

De geretourneerde waarden zijn woordenboeken en de normale syntaxis van het woordenboek kan worden toegepast om de sleutels en waarden te krijgen.

LATEN WE DE OUDER EN DE KINDEREN ZIEN

Er zijn overal tags. Soms willen we weten wat de onderliggende tags zijn en wat de bovenliggende tag is.

Als je niet al weet wat een parent- en child-tag is, zou deze korte uitleg moeten volstaan: een parent-tag is de onmiddellijke buitenste tag en een kind is de onmiddellijke binnenste tag van de tag in kwestie.

Als we naar onze html kijken, is de body-tag de bovenliggende tag van alle div-tags. Ook zijn de vetgedrukte tag en de ankertag de onderliggende items van de div-tags, waar van toepassing, aangezien niet alle div-tags ankertags hebben.

Dus we hebben toegang tot de bovenliggende tag door de . te bellen vindOuder methode.

soep.vind("div").zoekouder()

Dit zou de hele body-tag retourneren:


Naam:Dr Peter Parker

baan:Ingenieur voor machine learning

Telefoon:+12345678910



Om de onderliggende tag van de vierde div-tag te krijgen, noemen we de vindKinderen methode:

soep.find_all("div")[4].vindKinderen()

Het geeft het volgende terug:

[Website:, pparkerworks.com]

WAT ZIT HET VOOR ONS?

Bij het browsen op webpagina's zien we niet overal tags op het scherm. We zien alleen de inhoud van de verschillende tags. Wat als we de inhoud van een tag willen, zonder dat alle hoekige haakjes het leven ongemakkelijk maken?? Dat is niet moeilijk, we hoeven alleen maar te bellen get_text methode op de tag naar keuze en we krijgen de tekst in de tag en als de tag andere tags bevat, krijgt deze ook hun tekstwaarden.

Hier is een voorbeeld:

soep.vind("lichaam").get_text()

Dit retourneert alle tekstwaarden in de body-tag:

Naam:Dr. Peter Parker
Functie: Ingenieur machine learning
Telefoon: +12345678910
E-mail:[e-mail beveiligd]
Website:pparkerworks.com

CONCLUSIE

Dat is wat we hebben voor dit artikel. Er zijn echter nog andere interessante dingen die gedaan kunnen worden met beautifulsoup. U kunt de documentatie bekijken of gebruiken dir (BeautfulSoep) op de interactieve shell om de lijst met bewerkingen te zien die kunnen worden uitgevoerd op een BeautifulSoup-object. Dat is alles van mij vandaag, tot ik weer schrijf.

Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...
0 A.D. zelfstudie
Van de vele strategiespellen die er zijn, 0 A.D. slaagt erin om op te vallen als een uitgebreide titel en een zeer diep, tactisch spel ondanks dat het...
Unity3D-zelfstudie
Inleiding tot Unity 3D Unity 3D is een krachtige game-ontwikkelingsengine. Het is platformoverschrijdend, zodat je games voor mobiel, internet, deskto...