In Beautifilsoup beim 'find' Unterelemente ausschliessen?

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
kaineanung
User
Beiträge: 145
Registriert: Sonntag 5. April 2015, 20:57

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.
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>]
kaineanung
User
Beiträge: 145
Registriert: Sonntag 5. April 2015, 20:57

@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?
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.
Antworten