Seite 1 von 1

BeautifulSoup - genauere Eingrenzung

Verfasst: Montag 5. April 2021, 16:37
von Neu111
Hallo!
Ich nutze BeautifulSoup und möchte von einer Webseite eine bestimmte Tabelle "abgreifen".
Da die Webseite mehrere Tabellen enthält, liefert mir der Code

Code: Alles auswählen

soup.find_all("table")
mehrere Ergebnisse zurück.
Ist es möglich einen weiteren Filter zu setzen, damit BeautifulSoup die Suchtreffer weiter einschränkt?
Ich kenne noch

Code: Alles auswählen

soup.find_all("table", class_="test")
jedoch hat die Tabelle keine eigene CSS-Klasse.
Was ich suche, ist so etwas:

soup.find_all("table", enthält zusätzlich den String 'data-width="20%"')

Gibt es für mein Problem eine Lösung?

Danke

Re: BeautifulSoup - genauere Eingrenzung

Verfasst: Montag 5. April 2021, 18:09
von __blackjack__
@Neu111: Ja gibt es:

Code: Alles auswählen

    soup.find("table", {"data-width": "20%"})
Wobei ich da eher erst einmal schauen würde ob man die Tabelle nicht im Kontext sicherer identifizieren kann über den Weg bis zum <table>-Element.

Re: BeautifulSoup - genauere Eingrenzung

Verfasst: Dienstag 6. April 2021, 08:48
von Neu111
Danke, BlackJack.
Der HTML Code sieht so aus:

Code: Alles auswählen

<table data-width="40%" data-border="1" data-cellpadding="0" data-cellspacing="0" style="width: 40%; border-style: solid; border-width: 1px; border-color: #000000; background-color: #ffffff; border-collapse: collapse; border-spacing: 0px;" data-bordertype="all" data-bordercolor="#000000" data-bgcolor="#FFFFFF">.....
Könnte man eigentlich auch auf mehrere Attribute prüfen?
Also z.B. auf data-width="40%" UND data-bordercolor="#000000"?

Re: BeautifulSoup - genauere Eingrenzung

Verfasst: Dienstag 6. April 2021, 09:06
von Sirius3
__blackjack__ hat nach dem Weg zum table-Element gefragt. Also steckt <table> z.B. in einem <div> mit eindeutiger ID, oder was auch immer.

Re: BeautifulSoup - genauere Eingrenzung

Verfasst: Dienstag 6. April 2021, 11:26
von __blackjack__
@Neu111: Mal davon abgesehen das BeautifulSoup eine Dokumentation hat wo drin steht was man `find()` & Co alles übergeben kann, sollte es doch irgendwie offensichtlich sein, das es keinen Sinn machen würde ein Wörterbuch mit grundsätzlich nur einem Schlüssel/Wert-Paar als Argument zu akzeptieren, denn dazu bräuchte man kein Wörterbuch. Und was mag das dann wohl bedeuten wenn man da noch weitere Schlüssel/Wert-Paare übergibt? Und wie schwer ist es einen kleinen Test zu schreiben mit dem man das überprüft, wenn man schon keine Dokumentation lesen möchte…