Daten aus einer Tabelle mit BeautifulSoup in Python extrahieren
Beim Parsen von HTML-Dokumenten ist die Fähigkeit, Daten aus Tabellen zu extrahieren, eine häufige Anforderung. BeautifulSoup, eine beliebte Python-Bibliothek für Web Scraping, bietet eine leistungsstarke Möglichkeit, HTML zu analysieren und auf seine Inhalte zuzugreifen.
Parsen einer Tabelle mit BeautifulSoup
Zur Veranschaulichung des Prozesses von Betrachten wir beim Parsen einer Tabelle mit BeautifulSoup das Beispiel des „NYC Parking Ticket Parser“. Die HTML-Antwort für diese Seite ist recht komplex und das Ziel besteht darin, die Daten aus der Einzelpostentabelle zu extrahieren, die Informationen zu jedem Ticket enthält.
Um dies zu erreichen, müssen wir zunächst die Tabelle im HTML identifizieren Antwort unter Verwendung seiner eindeutigen Klasse:
<code class="python">table = soup.find("table", { "class" : "lineItemsTable" })</code>
Sobald die Tabelle gefunden ist, können wir durch die Zeilen iterieren, um die Daten zu extrahieren:
<code class="python">for row in table.findAll("tr"): cells = row.findAll("td") print cells</code>
Dieser Ansatz würde jedoch nur den HTML-Code bereitstellen Elemente für jede Zeile in der Tabelle. Um den eigentlichen Textinhalt zu erhalten, müssen wir den Text aus jeder Zelle extrahieren:
<code class="python">data = [] for row in table.findAll("tr"): cols = row.findAll("td") cols = [ele.text.strip() for ele in cols] data.append([ele for ele in cols if ele])</code>
Dieser Code durchläuft die Tabellenzeilen, extrahiert den Text aus den Zellen und entfernt alle führenden oder nachfolgenden Leerzeichen. Das Ergebnis ist eine Liste von Listen, wobei jede innere Liste eine Zeile in der Tabelle darstellt.
Umgang mit Komplexitäten
Im bereitgestellten Beispiel die letzte Zeile der Tabelle enthält den Zahlungsbetrag, der nicht Teil der Tabellendaten ist. Um dies zu bewältigen, können wir Zeilen mit weniger als einer bestimmten Anzahl an Elementen herausfiltern:
<code class="python">data = [row for row in data if len(row) >= 7]</code>
Zusätzlich enthält die letzte Spalte jeder Zeile ein Eingabetextfeld. Wir können damit umgehen, indem wir den Text vor dem Eingabeelement extrahieren:
<code class="python">data = [[col.split()[0] if col.find("input") else col for col in row] for row in data]</code>
Fazit
Mit diesen Modifikationen können Sie die Daten effektiv aus der Einzelpostentabelle extrahieren mit BeautifulSoup in Python. Denken Sie daran, den Code an Ihre spezifischen Anforderungen anzupassen und eventuell auftretende zusätzliche Komplexitäten zu berücksichtigen.
Das obige ist der detaillierte Inhalt vonWie können Sie mit BeautifulSoup in Python Daten aus einer HTML-Tabelle extrahieren und dabei insbesondere Komplexitäten wie zusätzliche Zeilen und Eingabeelemente bewältigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!