一、BeautifulSoup簡介
BeautifulSoup是一個Python庫,主要用於解析HTML和XML文檔。它可以將複雜的HTML和XML文檔轉換為樹形結構,方便我們查詢、遍歷和修改文檔內容。BeautifulSoup是基於Python標準庫中的HTML解析器實現的,因此在使用前需要先安裝。
安裝方法:
pip install beautifulsoup4
導入方法:
from bs4 import BeautifulSoup
二、BeautifulSoup的基本使用
在使用BeautifulSoup解析HTML或XML文檔之前,需要先將文檔轉為BeautifulSoup對象。
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p><p>這是段落2</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
通過這樣的方式,我們就可以將HTML代碼解析成為一個樹形結構,方便我們查詢其中的元素,就像訪問一個樹形結構的節點一樣。
三、選擇器
在查詢HTML或XML文檔的時候,我們需要使用選擇器。BeautifulSoup支持多種選擇器類型,如標籤名、CSS選擇器、正則表達式等。
1. 標籤選擇器
標籤選擇器是指選擇HTML或XML文檔中指定標籤的元素。使用方法如下:
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p><p>這是段落2</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
p_tag = soup.p
print(p_tag)
輸出結果:
<p class="content">這是段落1</p>
2. CSS選擇器
除了標籤選擇器之外,還可以使用CSS選擇器進行選擇。使用方法如下:
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p><p class="content">這是段落2</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
p_tags = soup.select(".content")
print(p_tags)
輸出結果:
[<p class="content">這是段落1</p>, <p class="content">這是段落2</p>]
3. 正則表達式選擇器
如果需要根據正則表達式選擇元素,可以使用find_all()方法,傳入一個正則表達式,如下所示:
import re
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p><p class="content">這是段落2</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
p_tags = soup.find_all(re.compile('^p'))
print(p_tags)
輸出結果:
[<p class="content">這是段落1</p>, <p class="content">這是段落2</p>]
四、元素內容和屬性
獲取元素內容和屬性可以使用string和attrs屬性。
1. 獲取元素內容
使用string屬性可以獲取元素的文本內容。
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p><p class="content">這是段落2</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
p_tag = soup.p
print(p_tag.string)
輸出結果:
這是段落1
2. 獲取元素屬性
使用attrs屬性可以獲取元素的屬性。
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p><p class="content">這是段落2</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
p_tag = soup.p
print(p_tag.attrs)
輸出結果:
{'class': ['content']}
五、修改元素
通過修改元素,我們可以改變文檔內容。例如,我們可以在元素結構中添加、刪除、修改文本和屬性。
1. 添加元素
使用insert()方法可以在指定位置添加元素。
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
new_tag = soup.new_tag('p')
new_tag.string = '這是新增的段落'
soup.body.insert(1, new_tag)
print(soup.prettify())
輸出結果:
<html>
<head>
<title>
這是標題
</title>
</head>
<body>
<p class="content">
這是段落1
</p>
<p>
這是新增的段落
</p>
</body>
</html>
2. 刪除元素
使用decompose()方法可以刪除指定元素。
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
p_tag = soup.p
p_tag.decompose()
print(soup.prettify())
輸出結果:
<html>
<head>
<title>
這是標題
</title>
</head>
<body>
</body>
</html>
3. 修改元素
修改元素的文本內容可以通過string屬性實現,修改元素屬性可以通過修改attrs屬性實現。
html_doc = """<html><head><title>這是標題</title></head>
<body><p class="content">這是段落1</p></body>
</html>"""
soup = BeautifulSoup(html_doc, 'html.parser')
p_tag = soup.p
p_tag.string = '這是修改後的內容'
p_tag['class'] = ['new-class']
print(soup.prettify())
輸出結果:
<html>
<head>
<title>
這是標題
</title>
</head>
<body>
<p class="new-class">
這是修改後的內容
</p>
</body>
</html>
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/158914.html