BeautifulSoup文档2-详细方法 | 对象的种类有哪些?
2023-03-07 09:51:32 时间
1 使用细节
- 将一段文档传入
BeautifulSoup
的构造方法,就能得到一个文档的对象,; - 可以传入一段字符串或一个文件句柄,比如:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("index.html"))
soup = BeautifulSoup("<html>data</html>")
2 对象的种类
2.1 种类说明
Beautiful Soup
将HTML
文档转换成一个树形结构,每个节点都是Python
对象;- 所有对象为4种:
Tag , NavigableString , BeautifulSoup , Comment .
2.2 Tag对象
- 与
XML
或HTML
原生文档中的tag
相同;
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2023/2/14
# 文件名称:bs02.py
# 作用:BeautifulSoup的使用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
from bs4 import BeautifulSoup
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>', 'html.parser')
tag = soup.b
print(type(tag))
- 输出为:
<class 'bs4.element.Tag'>
- tag很很多属性,两个最重要的属性:
name和attributes
2.2.1 name属性
- 通过
.name
来获取tag
的名字;
print(tag.name)
- 输出为:
b
- 可以修改tag的name:
tag.name = "blockquote"
print(tag)
- 输出为:
<blockquote class="boldest">Extremely bold</blockquote>
2.2.2 attributes属性
- 一个
tag
可能有很多个属性. tag <b class="boldest">
有一个“class”
的属性,值为“boldest” . ta
g的属性的操作方法与字典相同:
print(tag["class"])
- 输出为:
['boldest']
- 也可以直接”点”取属性, 比如:
.attrs
:
print(tag.attrs)
- 输出为:
{'class': ['boldest']}
tag
的属性可以被添加,删除或修改. 操作方法与字典一样:
tag['class'] = 'verybold'
tag['id'] = 1
print(tag)
del tag['class']
del tag['id']
print(tag)
print(tag.get('class'))
- 输出为:
<blockquote class="verybold" id="1">Extremely bold</blockquote>
<blockquote>Extremely bold</blockquote>
None
2.2.3 多值属性
- 最常见的多值的属性是
class
(一个tag
可以有多个CSS的class
).; - 还有一些属性
rel , rev , accept-charset , headers , accesskey
.; - 在
Beautiful Soup
中多值属性的返回类型是list
:
# 多值属性
css_soup = BeautifulSoup('<p class="body strikeout"></p>', 'html.parser')
print(css_soup.p['class'])
css_soup = BeautifulSoup('<p class="body"></p>', 'html.parser')
print(css_soup.p['class'])
- 输出为:
['body', 'strikeout']
['body']
2.3 NavigableString对象
- 用
NavigableString
类来包装tag
中的字符串;
# NavigableString类
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>', 'html.parser')
print(tag.string)
print(type(tag.string))
- 输出为:
Extremely bold
<class 'bs4.element.NavigableString'>
- 使用
replace_with()
方法替换tag
中的字符串:
# replace_with() 方法
tag.string.replace_with("No longer bold")
print(tag)
- 输出为:
<blockquote>No longer bold</blockquote>
2.4 BeautifulSoup对象
BeautifulSoup
对象表示的是一个文档的全部内容;- 它支持
遍历文档树
和搜索文档树
中描述的大部分的方法; - 包含了一个值为
“[document]”
的特殊属性:
# BeautifulSoup类
# [document]属性
print(soup.name)
- 输出为:[document]
2.5 Comment对象
Comment
对象是一个特殊类型的NavigableString
对象;Comment
可以对注释进行解析;
# Comment对象
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
soup = BeautifulSoup(markup, 'html.parser')
comment = soup.b.string
print(comment)
print(type(comment))
- 输出为:
Hey, buddy. Want to buy a used parser?
<class 'bs4.element.Comment'>
3 本文涉及的源码
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2023/2/14
# 文件名称:bs02.py
# 作用:BeautifulSoup的使用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
from bs4 import BeautifulSoup
# name属性
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>', 'html.parser')
tag = soup.b
print(type(tag))
print(tag.name)
# 修改name
tag.name = "blockquote"
print(tag)
print(tag["class"])
# Attributes属性
print(tag.attrs)
# tag属性修改删除等操作
tag['class'] = 'verybold'
tag['id'] = 1
print(tag)
del tag['class']
del tag['id']
print(tag)
print(tag.get('class'))
# 多值属性
css_soup = BeautifulSoup('<p class="body strikeout"></p>', 'html.parser')
print(css_soup.p['class'])
css_soup = BeautifulSoup('<p class="body"></p>', 'html.parser')
print(css_soup.p['class'])
# NavigableString类
print(tag.string)
print(type(tag.string))
# replace_with() 方法
tag.string.replace_with("No longer bold")
print(tag)
# BeautifulSoup类
# [document]属性
print(soup.name)
# Comment对象
markup = "<b><!--Hey, buddy. Want to buy a used parser?--></b>"
soup = BeautifulSoup(markup, 'html.parser')
comment = soup.b.string
print(comment)
print(type(comment))
相关文章
- Amazon Kinesis Data Analytics 无服务器流式数据处理服务简介
- 在规划 Amazon ElastiCache Redis 集群大小时,需要考量的五种工作负载特性
- 聊聊 Amazon EKS 集群上的多租户设计注意事项
- 立足 AWS 对 Kubernetes 进行成本优化
- 深度解析 Amazon ECS 集群上的 Auto Scaling 机制
- 现已开放 — AWS 亚太地区(首尔)区域的第四个可用区
- Amazon Interactive Video Service – 将视频直播添加到您的应用程序和网站
- AWS 架构完善的框架 – 更新白皮书、工具和最佳实践
- 新推出 – 使用 Amazon SageMaker Ground Truth 标记视频
- 结合 Authing 实现 AWS 云上的身份认证与授权
- 使用 AWS Cloud Map 建立跨 Amazon EKS 集群 App Mesh
- 将 Apache Airflow 部署到云端
- 使用 AWS Batch 与 Amazon CloudWatch 规则调度并运行 Amazon RDS 作业
- 如何部署使用 Amazon Chime 开发工具包构建的实时事件解决方案
- AWS Solutions Constructs – 适用于 AWS CDK 的架构模式库
- 使用 Lambda Powertools 简化无服务器最佳实践
- 使用 AWS Cloud Development Kit 通过 Open Policy Agent 实现策略即代码
- 克服阻碍踏上云迁移和数字转型之旅
- 基于 AWS Config 实现持续合规:以多重身份验证的持续合规配置为例
- Python wxPython基本教程