BeautifulSoup - genauere Eingrenzung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Neu111
User
Beiträge: 69
Registriert: Dienstag 10. März 2020, 19:02

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
Benutzeravatar
__blackjack__
User
Beiträge: 14055
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Neu111
User
Beiträge: 69
Registriert: Dienstag 10. März 2020, 19:02

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"?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

__blackjack__ hat nach dem Weg zum table-Element gefragt. Also steckt <table> z.B. in einem <div> mit eindeutiger ID, oder was auch immer.
Benutzeravatar
__blackjack__
User
Beiträge: 14055
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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…
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten