首頁 >後端開發 >Python教學 >如何使用 Python 中的 BeautifulSoup 從 HTML 表中提取數據,特別是處理諸如額外行和輸入元素之類的複雜性?

如何使用 Python 中的 BeautifulSoup 從 HTML 表中提取數據,特別是處理諸如額外行和輸入元素之類的複雜性?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-26 23:08:31423瀏覽

How can you extract data from an HTML table using BeautifulSoup in Python, specifically handling complexities such as extra rows and input elements?

在Python 中使用BeautifulSoup 從表中提取資料

解析HTML 文件時,從表中提取資料的能力是一個常見的要求。 BeautifulSoup 是一個流行的用於網頁抓取的 Python 庫,提供了一種強大的方法來解析 HTML 並訪問其內容。

使用 BeautifulSoup 解析表格

來說明以下程序使用 BeautifulSoup 解析表,讓我們考慮一下「NYC Parking Ticket Parser」的範例。此頁面的 HTML 回應非常複雜,目標是從包含每張票證資訊的行項目表中提取資料。

要實現此目的,我們首先需要識別HTML 中的表使用其獨特的類別進行回應:

<code class="python">table = soup.find("table", { "class" : "lineItemsTable" })</code>

一旦找到表,我們就可以迭代行以提取資料:

<code class="python">for row in table.findAll("tr"):
    cells = row.findAll("td")
    print cells</code>

但是,這種方法只能提供HTML表中每一行的元素。為了獲取實際的文本內容,我們需要從每個單元格中提取文本:

<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>

此程式碼迭代表格行,從單元格中提取文本,並去除任何前導或尾隨空格。結果是一個列表列表,其中每個內部列表代表表中的一行。

處理複雜性

在提供的範例中,表格的最後一行包含付款金額,該金額不屬於表格資料的一部分。為了解決這個問題,我們可以過濾掉元素數量少於一定數量的行:

<code class="python">data = [row for row in data if len(row) >= 7]</code>

此外,每行的最後一列包含一個輸入文字方塊。我們可以透過擷取輸入元素之前的文字來處理此問題:

<code class="python">data = [[col.split()[0] if col.find("input") else col for col in row] for row in data]</code>

結論

透過這些修改,您可以有效地從行項目表中擷取數據在Python 中使用BeautifulSoup。請記住根據您的具體要求調整程式碼並處理可能出現的任何其他複雜性。

以上是如何使用 Python 中的 BeautifulSoup 從 HTML 表中提取數據,特別是處理諸如額外行和輸入元素之類的複雜性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn