beautifulSoup 【HTML树解析库】基本知识

1. 文档地址

beautifulSoup4 文档

2. 安装

pip3 install beautifulsoup4

3. 使用

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("index.html"))

soup = BeautifulSoup("<html>data</html>")

4. 解析器

  • 推荐使用lxml作为解析器,因为效率更高
  • Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxmlhtml5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定
解析器使用方法优势劣势
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语言库
html5libBeautifulSoup(markup, "html5lib")最好的容错性以浏览器的方式解析文档生成HTML5格式的文档速度慢不依赖外部

5. 对象的种类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hrO4xBRO-1678856014746)(beautifulSoup.assets/image-20230315114102272.png)]

基本元素类型说明
Tag<class ‘bs4.element.Tag’>soup.b
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b
type(tag)
# <class 'bs4.element.Tag'>
基本元素类型说明
Nametag中最重要的属性: name和attributes标签名字,通过 .name 来获取
tag.name
# 'b'
基本元素类型说明
Attributestag中最重要的属性: name和attributes标签的属性;tag[‘class’]或者tag.attrs获取
tag['class']
# 'boldest'

# 或者
tag.attrs
# {'class': 'boldest'}
基本元素类型说明
NavigableString<class ‘bs4.element.NavigableString’>标签内非属性字符串,标签内容文本;tag.string 获取
tag.string
# 'Extremely bold'
type(tag.string)
# <class 'bs4.element.NavigableString'>
基本元素类型说明
Comment<class ‘bs4.element.Comment’>注释部分;tag.string 获取
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
soup = BeautifulSoup(markup)
comment = soup.b.string  # 'Hey, buddy. Want to buy a used parser'
type(comment)
# <class 'bs4.element.Comment'>

6. 遍历

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-In8VU7iZ-1678856014747)(beautifulSoup.assets/image-20230315120817033.png)]

6.1 下行遍历

属性说明
.contents儿子节点列表,其中‘\n’换行也作为列表的一个元素【当前节点下一层】
.children与.contents类似,用于遍历儿子节点【当前节点下一层】
.descendants子孙节点的迭代类型,包含所有子孙节点,用于遍历循环【当前节点后续所有节点】

6.2 上行遍历

属性说明
.parent 父节点
.parents 所有父辈节点
link = soup.a
link
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
for parent in link.parents:
    if parent is None:
        print(parent)
    else:
        print(parent.name)
# p
# body
# html
# [document]
# None

6.3 平行遍历

属性说明
.next_sibling 当前节点的下一个兄弟节点
.previous_sibling当前节点的上一个兄弟节点
.next_siblings 当前节点的下面的所有兄弟节点
.previous_siblings当前节点的上面的所有兄弟节点

7. 格式化与编码

7.1 格式化

格式化说明
prettify()方法加入 \n 格式化 HTML
在这里插入图片描述

7.2 编码

  1. bs4库 将读入的内容都转换成了UTF-8 编码;
  2. Python3默认支持UTF-8编码;建议使用bs4库时用Python3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值