python中的beautiful_Python中Beautiful Soup的用法

本文介绍了Python库Beautiful Soup的基本概念、安装方法和主要对象类型,包括Tag、NavigableString、BeautifulSoup和Comment。通过示例展示了如何获取和操作HTML标签的属性、内容,以及处理注释等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原标题:Python中Beautiful Soup的用法

66939ed90d416b1dcad53e981578ae3c.gif

1、Beautiful Soup的简介

简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。

官方解释如下:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

2、Beautiful Soup 安装

pip install beautifulsoup4

安装 lxml

pip install lxml

另一个可供选择的解析器是纯Python实现的 html5lib , html5lib的解析方式与浏览器相同,可以选择下列方法来安装html5lib:

pip install html5lib

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装

3、创建 Beautiful Soup 对象

首先必须要导入 bs4 库

from bs4 import beautifulSoup

创建一个爱丽丝梦游仙境的字符串,后面用来实验:

html ="""

The Dormouse's story

The Dormouse's story

Once upon a time there were three little sisters; and their names were

Elsie,

Lacie and

Tillie;

and they lived at the bottom of a well.

...

"""

#创建beautifulsoup对象

soup =beautifulSoup(html)

#还可以用本地HTML文件来创建对象,如:

soup =beautifulSoup(open('index.html'))

#下面我们来打印一下 soup 对象的内容,格式化输出

printsoup.prettify()

#这个函数经常用到,要牢记

The Dormouse's story

4、四大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是

Python对象,所有对象可以归纳为4种:

Tag

NavigableString

BeautifulSoup

Comment

(1)Tag

Tag 是什么?通俗点讲就是 HTML 中的一个个标签,例如

The Dormouse’s story

用 Beautiful Soup 来方便地获取 Tags:

下面每一段代码中注释部分即为运行结果:

printsoup.title

#

The Dormouse's story

printsoup.head

#

The Dormouse's story

printsoup.a

#

printsoup.p

#

The Dormouse's story

有一点是,它查找的是在所有内容中的第一个符合要求的标签,如果要查询所有的标签,我们在后面进行介绍。

我们可以验证一下这些对象的类型:

printtype(soup.a)

#

'''对于 Tag,它有两个重要的属性,是 name 和 attrs,下面我们分别来感受一下'''

#name:

printsoup.name

printsoup.head.name

#[document]

#head

'''soup 对象本身比较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称。'''

#attrs

printsoup.p.attrs

#{'class': ['title'], 'name': 'dromouse'}

'''在这里,我们把 p 标签的所有属性打印输出了出来,得到的类型是一个字典。

如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什么'''

printsoup.p['class']

#['title']

'''还可以这样,利用get方法,传入属性的名称,二者是等价的'''

printsoup.p.get('class')

#['title']

我们可以对这些属性和内容等等进行修改,例如

soup.p['class']="newClass"

printsoup.p

#

The Dormouse's story

(2)NavigableString

既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?

很简单,用 .string 即可,例如

printsoup.p.string

#The Dormouse's story

这样我们就轻松获取到了标签里面的内容,想想如果用正则表达式要多麻烦。它的类型是一个 NavigableString,

翻译过来叫 可以遍历的字符串,不过我们最好还是称它英文名字吧。

来检查一下它的类型:

printtype(soup.p.string)

#

(3)BeautifulSoup

BeautifulSoup 对象表示的是一个文档的全部内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性:

printtype(soup.name)

#

printsoup.name

# [document]

printsoup.attrs

#{} 空字典

(4)Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。

我们找一个带注释的标签:

printsoup.a

printsoup.a.string

printtype(soup.a.string)

#运行结果如下:

Elsie

a 标签里的内容实际上是注释,但是如果我们利用 .string 来输出它的内容,我们发现它已经把注释符号去掉了,所以这可能会给我们带来不必要的麻烦。另外我们打印输出下它的类型,发现它是一个 Comment 类型,

所以,我们在使用前最好做一下判断,判断代码如下:

iftype(soup.a.string)==bs4.element.Comment:

printsoup.a.string

上面的代码中,我们首先判断了它的类型,是否为 Comment 类型,然后再进行其他操作,如打印输出。

由于篇章较长,这里先简单介绍一下Beautiful Soup的用法,后面我再整理更多的内容供大家参考学习。

希望通过上面的内容能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

如果想快速联系我,欢迎关注微信公众号:AiryData。

欢迎访问原文链接查看更多精彩内容。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值