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

Mary-Kate Olsen
發布: 2024-10-26 23:08:31
原創
320 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!