Ich versuche, Informationen aus einer Tabelle mit bs4 und Python zu extrahieren. wenn ich den folgenden Code verwende Informationen aus Header der Tabelle zu extrahieren:Extrahieren von Informationen aus einer Tabelle außer Header der Tabelle mit bs4
tr_header=table.findAll("tr")[0]
tds_in_header = [td.get_text() for td in tr_header.findAll("td")]
header_items= [data.encode('utf-8') for data in tds_in_header]
len_table_header = len (header_items)
Es funktioniert, aber für die folgenden Codes, die ich Informationen aus der ersten Reihe zum Ende der Tabelle zu extrahieren versuchen:
tr_all=table.findAll("tr")[1:]
tds_all = [td.get_text() for td in tr_all.findAll("td")]
table_info= [data.encode('utf-8') for data in tds_all]
es gibt die folgende Fehlermeldung:
AttributeError: 'list' object has no attribute 'findAll'
Kann mir jemand helfen, es zu bearbeiten. Diese
ist Tabelleninformationen:
<table class="codes"><tr><td><b>Code</b>
</td><td><b>Display</b></td><td><b>Definition</b></td>
</tr><tr><td>active<a name="active"> </a></td>
<td>Active</td><td>This account is active and may be used.</td></tr>
<tr><td>inactive<a name="inactive"> </a></td>
<td>Inactive</td><td>This account is inactive
and should not be used to track financial information.</td></tr></table>
Dies ist die Ausgabe für tr_all:
[<tr><td><b>Code</b></td><td><b>Display</b></td><td><b>Definition</b></td></tr>, <tr><td>active<a name="active"> </a></td><td>Active</td><td>This account is active and may be used.</td></tr>, <tr><td>inactive<a name="inactive"> </a></td><td>Inactive</td><td>This account is inactive and should not be used to track financial information.</td></tr>]
Sie sollten wahrscheinlich HTML-Code posten Sie versuchen, zu analysieren. Da 'tr_header' ein einzelnes bs4-Element ist, können Sie findAll aufrufen. Aber für die Liste der Zeilen (und das ist, was Sie wahrscheinlich von "tr_all" erhalten) Sie müssen findAll für jedes Element nicht auf der ganzen Liste aufrufen (mit doppeltem Listenverständnis oder besser - getrennt für Schleife - für Lesbarkeit) – JustMe
@JustMe, thank Sie ! Selbst für diesen Code tr_all = table.findAll ("tr") bekomme ich immer noch eine Liste, aber dafür: tr_header = table.findAll ("tr") [0] Ich bekomme keine Liste. Ich bin total verwirrt. Ich habe eine andere Frage. Ist es möglich, diesen Code zu bearbeiten, um Tabelleninformationen aus der ersten Zeile am Ende der Tabelle hinzuzufügen: table_information = [td.get_text() für td in table.findAll ("td")]. Vielen Dank ! – Mary