一、BeautifulSoup 简介
Beautiful Soup是一个Python库,用于从HTML或XML文件中提取数据。它提供了一种简单而直观的方式来遍历、搜索和修改HTML或XML文档的结构。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了
另外,Beautiful Soup 3 目前已经停止开发,官网推荐在现在的项目中使用Beautiful Soup 4。
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装。
解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
Python标准库 | BeautifulSoup(markup, "html.parser") | Python的内置标准库 执行速度适中 文档容错能力强 | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差 |
lxml HTML 解析器 | BeautifulSoup(markup, "lxml") | 速度快 文档容错能力强 | 需要安装C语言库 |
lxml XML 解析器 | BeautifulSoup(markup, ["lxml", "xml"]) 或BeautifulSoup(markup, "xml") | 速度快 唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(markup, "html5lib") | 最好的容错性 以浏览器的方式解析文档 生成HTML5格式的文档 | 速度慢 不依赖外部扩展 |
二、BeautifulSoup 安装
Beautiful Soup 3 目前已经停止开发,推荐在现在的项目中使用Beautiful Soup 4,不过它已经被移植到BS4了,也就是说导入时我们需要 import bs4。
1、安装Beautiful Soup
pip install beautifulsoup4
2、安装解析器
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器。
(1)内置解析器 html.parser
-
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器
-
如果我们不安装它,则 Python 会使用 Python默认的解析器
soup=BeautifulSoup(页面源码,'html.parser')
(2)第三方解析器 lxml
- lxml 解析器更加强大,速度更快,推荐安装。
pip3 install lxml
- 语法
soup=BeautifulSoup(页面源码,'lxml')
(3)第三方解析器 html5lib
-
另一个可供选择的解析器是纯Python实现的 html5lib
-
html5lib的解析方式与浏览器相同
-
可以选择下列方法来安装html5lib
pip3 install html5lib
- 语法
soup=BeautifulSoup(页面源码,'html5lib')
三、BeautifulSoup 使用
1、首先必须要导入 bs4 库
from bs4 import BeautifulSoup
我们创建一个字符串,后面的例子我们便会用它来演示
html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
2、创建 BeautifulSoup 对象
- 构造soup对象时,可以传入解析器参数
- 如果不传入的话,会以最好的方式去解析
(1)方式一
# 直接放入 HTML 源码
soup = BeautifulSoup("<html>data</html>")
(2)方式二
# 指定HTML源码文件,传入文件源码
soup = BeautifulSoup(open("index.html"))
3、完整示例
# 导入所需第三方库
from bs4 import BeautifulSoup
# 这里先用一个简单的HTML数据为例
htmlData = """<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
</body>
</html>"""
# 将字符串型的HTML数据转为beautifulsoup对象(指定解析器)
soup = BeautifulSoup(htmlData, "lxml")
print("转换结果为:", soup)
print("转换结果的类型为:", type(soup))
# 格式化输出HTML数据
htmlPrettify = soup.prettify()
print("格式化输出HTML数据:", htmlPrettify)
print("格式化输出HTML数据的类型:", type(htmlPrettify))
"""
转换结果为: <html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
</body>
</html>
转换结果的类型为: <class 'bs4.BeautifulSoup'>
格式化输出HTML数据: <html>
<head>
<title>
The Dormouse's story
</title>
</head>
<body>
<p class="title">
<b>
The Dormouse's story
</b>
</p>
<a class="sister" href="http://example.com/tillie" id="link3">
Tillie
</a>
</body>
</html>
格式化输出HTML数据的类型: <class 'str'>
"""
注意:
1、BeautifulSoup()方法返回的是一个bs4.BeautifulSoup对象(该对象表示整个HTML数据),我们可以根据这个对象来使用不同的方法来获得HTML中我们需要的数据
2、在BeautifulSoup()方法中感觉最好指定解析器(使用lxml解析器),不然有时候会报错
3、上面例子中使用了prettify()方法:该方法用于格式化打印出获得的内容。这个函数经常用到所以要记住了
4、在控制台打印bs4.BeautifulSoup对象时,虽然其看起来像一个字符串。但其实际不是字符串。可以使用str()或prettify()方法来将bs4.BeautifulSoup对象转为字符串
标签:解析器,Beautiful,lxml,Python,BeautifulSoup,爬虫,HTML,安装 From: https://www.cnblogs.com/xiao01/p/18104294