一、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/n/158914.html