使用 BeautifulSoup 在 HTML 文件中查詢具有給定屬性值的標籤
從 HTML 頁面提取資料是網路爬蟲過程中的一項典型活動。HTML 頁面中發現的許多標籤和屬性有助於定位和提取相關資料。一個名為 BeautifulSoup 的知名 Python 模組可用於解析 HTML 文字並提取有用的資訊。在本教程中,我們將重點關注使用 BeautifulSoup 來查詢具有特定屬性值的標籤。
安裝和設定
為了開始,我們必須安裝 BeautifulSoup。可以使用 Python 的軟體包安裝程式 Pip 來完成此操作。以下命令應輸入到命令視窗或終端中:
pip install beautifulsoup4
安裝完成後,我們可以在 Python 程式碼中使用以下語句匯入 BeautifulSoup:
from bs4 import BeautifulSoup
語法
使用 BeautifulSoup 查詢具有給定屬性值的標籤的語法如下:
soup.find(tag_name, attrs={attribute_name: attribute_value})
這裡,soup 指的是包含已解析 HTML 內容的 BeautifulSoup 物件,tag name 指的是我們正在查詢的標籤,attribute name 指的是我們正在查詢的屬性,attribute value 指的是我們正在匹配的值。
演算法
使用 BeautifulSoup 解析 HTML 文件
使用 find() 方法查詢具有給定屬性值的標籤
從標籤中提取所需資料
示例 1
要查詢具有類 "important" 的段落標籤,我們可以使用以下程式碼:
from bs4 import BeautifulSoup
html_doc="""<html>
<body>
<p class="important">Fancy content here, just a test</p>
<p>This is a normal paragraph</p>
</body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
tag = soup.find('p', attrs={'class': 'important'})
print(tag)
輸出
<p class="important">Fancy content here, just a test</p>
soup 是包含已解析 HTML 文件的 BeautifulSoup 物件,'p' 是我們想要查詢的標籤名稱,'class' 是我們想要搜尋的屬性的名稱,'important' 是我們想要匹配的屬性的值。find() 方法返回第一個匹配給定條件的標籤,在本例中,是第一個具有類 "important" 的段落標籤。
示例 2
要查詢 id 為 "content" 的 div 標籤內的第一個段落標籤,我們可以使用以下程式碼:
from bs4 import BeautifulSoup
html_doc = """<html>
<body>
<div id="header">
<h1>Welcome to my website</h1>
<p>All the help text needed will be in this paragraph</p>
</div>
<div id="content">
<h2>Section 1</h2>
<p>Content of section 1 goes here</p>
<h2>Section 2</h2>
<p>Content of section 2 goes here</p>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
div_tag = soup.find('div', attrs={'id': 'content'})
tag = div_tag.find('p')
print(tag)
輸出
<p>Content of section 1 goes here</p>
這裡,soup 是包含已解析 HTML 文件的 BeautifulSoup 物件,'div' 是我們想要查詢的標籤名稱,'id' 是我們想要搜尋的屬性的名稱,'content' 是我們想要匹配的屬性的值。find() 方法返回第一個匹配給定條件的 div 標籤,在本例中,是 id 為 "content” 的 div 標籤。
示例 3
from bs4 import BeautifulSoup
html_doc="""<html>
<body>
<h1>List of Books</h1>
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Price</th>
</tr>
<tr>
<td><a href="book1.html">Book 1</a></td>
<td>Author 1</td>
<td>$10</td>
</tr>
<tr>
<td><a href="book2.html">Book 2</a></td>
<td>Author 2</td>
<td>$15</td>
</tr>
<tr>
<td><a href="book3.html">Book 3</a></td>
<td>Author 3</td>
<td>$20</td>
</tr>
</table>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
price_tag = soup.find('td', text='$15')
book_tag = price_tag.find_previous('td').find_previous('td').find_previous('td')
title = book_tag.text
author = book_tag.find_next('td').text
print(title, author)
輸出
$10 Book 2
這裡,"soup" 指的是包含已解析 HTML 內容的 BeautifulSoup 物件,"td" 代表我們正在查詢的標籤名稱,"text" 代表我們正在嘗試匹配的文字,"$15" 代表該文字的值。在本例中,find() 函式返回第一個符合指定條件的 td 標籤,即包含字串 "$15" 的 td 標籤。
然後,使用 find previous() 函式查詢包含書籍標題和 href 屬性的 td 元素。此方法在文件樹中向後查詢,直到找到第一個符合指定條件的標籤,該標籤位於包含值 "$15" 的 td 標籤之前。
由於我們擁有書籍標題標籤,因此我們可以使用 text 屬性來檢索文字。下一步是使用 find next sibling() 函式查詢包含作者名稱的後續 td 標籤。此方法返回書籍標題 td 標籤之後的 td 標籤,因為它是具有相同父標籤的下一個兄弟標籤。
應用
查詢具有特定屬性值的標籤是一項常見的網路爬蟲活動,可用於各種應用中。
使用網站資料建立機器學習模型或進行資料分析
電子商務網站抓取以獲取產品資訊和價格比較
使用招聘網站抓取來分析和跟蹤職位釋出
此任務可以使用多種網路抓取技術、程式語言(如 Python 和 BeautifulSoup)以及其他工具來完成。在進行任何網路抓取之前,閱讀網站的服務條款至關重要,因為某些網站可能已實施安全措施以防止抓取。
結論
本文介紹了 BeautifulSoup 的設定和安裝,BeautifulSoup 是一個強大的 Python 模組,它使從 HTML 和 XML 文件中提取資訊成為可能,介紹了用於識別具有給定屬性值的特定標籤的語法,並提供了有關如何在實際情況下正確使用這些技術的詳細說明。
find()
和find_all()
方法都已涵蓋,以及如何在 HTML 頁面中查詢具有特定屬性值的標籤。BeautifulSoup 是一個靈活且強大的工具,它徹底改變了網路抓取的世界,並提供了大量的空間供進一步探索和實驗。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP