Seite 1 von 1

In Beautifilsoup beim 'find' Unterelemente ausschliessen?

Verfasst: Montag 8. Februar 2016, 22:34
von kaineanung
Hallo Leute,

nach langer Zeit habe ich dann doch mal wieder eine Frage an euch.

ich habe ein Result auf ein beautifulsoup wie folgt:

Code: Alles auswählen

result = find_all('tr')

for element in result:
	print(result)
Jetzt habe ich eine Stelle im HTML welches eine Untertabelle in einem der tr-Tags beinhaltet.
Leider habe diese keine id oder class Kennung und so kann ich nicht spezifizieren welche tr-Tags ich in meiner Liste haben will. Also durchläuft meine Iteration die TR-Tags der Haupttabelle als auch der Untertablle.
Ich brauche aber lediglich die der Haupttabelle und jetzt frage ich euch: kann man das in BS irgendwie definieren auch ohne irgendwelche Tag-Eigenschaften?

Hier ein bildliches Beispiel:

[Codebox=html4strict file=Unbenannt.html]
<table>
<tr><td>Feld 1</td></tr>
<tr><td>Feld 2</td></tr>
<tr><td><table><tr><td>Unter Feld 1</td></tr></table></td></tr>
<tr><td>Feld 4</td></tr>
</table>
[/Codebox]

Ich habe also im Feld 3 eine weitere Tabelle mit seinen tr-Tags.
Ich möchte aber lediglich Iterieren durch die TR-Tags des Hauptfeldes.
Wenn ich das aber so wie oben angegeben mache, dann habe ich in meiner Schleife auch die TR-Tags der Untertablle.

Für eure Hilfe wäre ich sehr dankbar.

Re: In Beautifilsoup beim 'find' Unterelemente ausschliessen?

Verfasst: Montag 8. Februar 2016, 23:29
von BlackJack
@kaineanung: Du musst einfach nur angeben das die Suche nicht rekursiv durchgeführt werden soll:

Code: Alles auswählen

In [22]: print s
<table>
<tr><td>Feld 1</td></tr>
<tr><td>Feld 2</td></tr>
<tr><td><table><tr><td>Unter Feld 1</td></tr></table></td></tr>
<tr><td>Feld 4</td></tr>
</table>

In [23]: soup = BeautifulSoup(s)

In [24]: soup.table('tr', recursive=False)
Out[24]: 
[<tr><td>Feld 1</td></tr>,
 <tr><td>Feld 2</td></tr>,
 <tr><td><table><tr><td>Unter Feld 1</td></tr></table></td></tr>,
 <tr><td>Feld 4</td></tr>]

Re: In Beautifilsoup beim 'find' Unterelemente ausschliessen?

Verfasst: Dienstag 9. Februar 2016, 20:46
von kaineanung
@BlackJack

Ich benutze BS eigentllich immer mit der 'find'-Methode. Kann ich das da auch irgendwie einbauen?
Diese von dir genannte Methode kenne ich so gar nicht?

Re: In Beautifilsoup beim 'find' Unterelemente ausschliessen?

Verfasst: Dienstag 9. Februar 2016, 21:18
von BlackJack
@kaineanung: Na dann nimm halt `find()` um die Tabelle zu finden und `find_all()` um die Tabellenzeilen zu finden. Ausser einem etwas längerem Ausdruck ändert sich am Prinzip nichts.