首页 > 其他分享 >解析库之bs4

解析库之bs4

时间:2022-10-10 23:13:56浏览次数:40  
标签:bs4 标签 find html bs print 解析 class

bs4.Beautiful

第一个参数字符串类型的html源代码,可以使用urlopen发起请求后使用read()方法或者requests.get()发起请求后使用text()获取源码

第二个参数是html解析器,可以选择使用html.parser或者lxml

preffity()

以标准缩进的形式返回html源码

属性选择

html = '''
<html lang="en">
<head><title>The Dormouse 's story</title></head>
<body>
<p class="title" name="dormouse"><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"><span>Elsie</span></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>
</body>
</html>'''
bs = BeautifulSoup(html, 'lxml')
# 返回标准缩进的html代码
print(bs.prettify())
# 选择标签,返回bs4.element.Tag对象,打印会返回当前标签及其内部内容
print(bs.p)
print(bs.a)
# name返回的是标签的名字,<p>返回p
print(bs.p.name)
# 属性选取
print(bs.p.attrs['class'])
print(bs.p['class'])
# 标签内容
print(bs.p.string)
# 嵌套选择
print(bs.head.title)
# 关联选择
# 获取body的所有直接子节点,list存储
print(bs.body.contents)
# children同样返回所有直接子节点,是个生成器
for i, text in enumerate(bs.body.children):
print(text)
# 返回所有子孙节点,生成器类型
print(bs.body.descendants)
# parent获取当前节点的父结点
print(bs.p.parent)
# parents获取当前结点的所有祖先结点,生成器类型
print(bs.p.parents)
# next_sibling和pre_sibling获取当前结点的下一个和上一个兄弟结点
# next_siblings和pre_siblings获取当前结点之后和之前的所有兄弟结点,生成器类型,不再做示例

方法选择器find_all()

可以使用name查询,例如bs.find_all(name=’p’)

可以使用attrs查询,例如bs.find_all(attrs={‘class’:’container’})

对于常见的属性可以直接使用bs.find_all(id=’item-1’),bs.find_all(class_=’container’)

因为class是py关键字,所以使用class_

使用text查询,text的参数可以是字符串也可以是正则表达式对象,如果为字符串,刚返回内容与参数相同的tag,如果是正则表达式对象,则返回内容中包含有可以匹配正则表达式的tag。

recursive默认为True,即递归查询。

此外还有许多查询方法,用法与find_all类似,只不过作用范围不同,例如

find()

find_parent()和find_parents()

find_next_sibling()和find_next_siblings()

find_previous_sibling()和find_previous_siblings()

find_next()和find_all_next()

find_previous()和find_all_previous()

对于find_parent和find_parents,最父级的标签是<html>标签,但是<html>标签的parent是整个html文档,所以parents的数量会比自己印象中的多一个。

css选择器

使用select()来筛选tag,参数为一个css选择字符串

  1. 选取父结点class为panel,自身class为-panel-heading的tag
  2. 选择所有ul下的li标签
  3. 选择id为list-2的标签内所有的class为element的tag
  4. 选取第一个ul标签

标签:bs4,标签,find,html,bs,print,解析,class
From: https://www.cnblogs.com/wy12148/p/16777761.html

相关文章

  • 斗鱼 H5 直播原理解析,它是如何省了 80% 的 CDN 流量?
    斗鱼直播相信大家都听说过,打开斗鱼官网就可以直接在浏览器中观看直播。那么斗鱼是如何实现浏览器视频直播的呢?本篇文章就来解析斗鱼是如何实现直播的,以及它是如何节省80%......
  • 解析库之lxml
    etree解析html解析html字符串,将字符串传递给etree.HTML()方法:解析html文件,传递文件路径和解析器:xpath方法html.xpath()方法参数为xpath规则,选取html中的元素,返回为封装好的......
  • 不再只有Yolo,现在轻量级检测网络层出不穷(框架解析及部署实践)
    计算机视觉研究院专栏作者:Edison_GNanoDet总体而言没有特别多的创新点,是一个纯工程化的项目,主要的工作就是将目前学术界的一些优秀论文,落地到移动端的轻量级模型上。最后通......
  • ETCD Raft模块解析
    1.Raft简介raft是一个管理复制式日志的共识算法,它是通过复制日志的方式来保持状态机里的数据是最终一致的。 整体的一个运行描述图:  从图中可以看到由几部分组......
  • 如何实现汇川PLC和工业机器人的协议解析与数据采集?
    汇川是一家专注于工业自动化的设备制造商,具备一整套完善的产品与服务,涉及变频器、伺服系统、PLC、HMI触摸屏、电动汽车电机控制器、光伏逆变器等等,在制造业、新能源、环保节......
  • @网络通信及dns解析
    网络通信文章目录​​网络通信​​​​一.网络通信的实现​​​​二.通信实现的过程​​​​三.DNS域名解析​​​​1.dns的出现​​​​2.dns的作用​​​​3.dns的查询​......
  • 深入理解c11(c11新特性解析与应用) pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1T2Zyh0PqNFRdllUIWmkcTQ点击这里获取提取码 ......
  • drf三大认证之权限源码解析
    1.认证,频率,权限的源码解读入口就是APIView源码的dispatch方法的三大认证,全局异常处理self.initial(request,*args,**kwargs)2.查看APIView的initial里面的三句代......
  • android download hosts 域名解析
    203.208.40.97dl.google.com203.208.40.33dl.l.google.com74.125.137.91dl-ssl.google.com......
  • ClickHouse(07)ClickHouse数据库引擎解析
    目录Atomic建表语句特性TableUUIDRENAMETABLESDROP/DETACHTABLESEXCHANGETABLESReplicatedMergeTreeinAtomicDatabaseMySQL创建数据库mysql与ClickHouse数据类型对......