首页 > 其他分享 >bs4遍历文档树

bs4遍历文档树

时间:2024-02-20 16:11:10浏览次数:25  
标签:body 遍历 bs4 标签 soup html 文档 print 节点

数据准备:

# 导入模块
from bs4 import BeautifulSoup

# 查询数据文本
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" id='id_xx' xx='zz'>lqz <b>The Dormouse's story <span>彭于晏</span></b>  xx</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>
"""

# 解析库选择
# soup=BeautifulSoup(html_doc,'html.parser')
soup = BeautifulSoup(html_doc, 'lxml')  # pip3 install lxml

1 文档容错能力

res=soup.prettify()
# 能够自动补全并美化标签
print(res)

2 遍历文档树

文档树:html开头 ---title结尾,中间包含了很多标签

# 通过  . 查找标签
print(soup.html.head.title)

3 通过 . 找到p标签

只能找到最先找到的第一个

print(soup.html.body.p)

# 或者
print(soup.p)

4 获取标签的名称

p = soup.html.body.p
print(p.name)

5 获取标签的属性

p = soup.html.body.p
print(p.attrs.get('class')) # class 特殊,可能有多个,所以放在列表汇总

print(soup.a.attrs.get('href'))
# 或者
print(soup.a['href'])

6 获取标签的文本内容

6.1 标签对象.text # 拿标签子子孙孙
6.2 标签对象.string # 该标签有且只有自己有文本内容才能拿出来
6.3 标签对象.strings # 拿子子孙孙,都放在生成器中

print(soup.html.body.p.b.text)
print(soup.html.body.p.text)
print(soup.html.body.p.string) # 不能有子 孙
print(soup.html.body.p.b.string) # 有且只有它自己

print(soup.html.body.p.strings) # generator 生成器---》把子子孙孙的文本内容都放在生成器中,跟text很像
print(list(soup.html.body.p.strings)) # generator 生成器---》把子子孙孙的文本内容都放在生成器中,跟text很像

7 嵌套选择 . 完后可以继续再 .

print(soup.head.title.text)

8 子节点、子孙节点

print(soup.p.contents) # p下所有子节点,只拿直接子节点

print(soup.p.children) # 直接子节点 得到一个迭代器,包含p下所有子节点
for i,child in enumerate(soup.p.children):
    print(i,child)

print(soup.p.descendants) #获取子孙节点,p下所有的标签都会选择出来  generator
for i,child in enumerate(soup.p.descendants):
    print(i,child)

9 父节点、祖先节点

print(soup.a.parent) # 获取a标签的父节点

print(list(soup.a.parents)) # 找到a标签所有的祖先节点,父亲的父亲,父亲的父亲的父亲...

10 兄弟节点

print(soup.a.next_sibling) #下一个兄弟
print(soup.a.previous_sibling) #上一个兄弟

print(list(soup.a.next_siblings)) #下面的兄弟们=>生成器对象
print(soup.a.previous_siblings) #上面的兄弟们=>生成器对象

标签:body,遍历,bs4,标签,soup,html,文档,print,节点
From: https://www.cnblogs.com/wellplayed/p/18023354

相关文章

  • 编程开发 --- springboot参考文档之概述
    该文档来自于官方,本人只是翻译通顺、忽略废话、术语通俗解释、代码注释等优化工作,目的只是让我们更快的理解它。https://github.com/spring-projects/spring-boot/wiki   第一章法律版权声明  spring.io ©2012-2024您可以复制本文件供自己使用或分发给他人,但不得......
  • 遍历用for还是foreach?
    在C#中,for和foreach都是用来遍历集合或数组的常见循环结构。每种循环都有其适用的场景和优缺点。下面我们将通过一些例子来详细比较这两种循环。1.使用for循环for循环在C#中通常用于需要明确控制循环次数或需要访问集合索引的场景。int[] numbers = { 1, 2, 3, 4, 5 ......
  • 【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚......
  • Spring Cloud Gateway 中文文档
    SpringCloudGateway中文文档(查看原文)官方文档该项目提供了一个建立在SpringEcosystem之上的API网关,包括:Spring5,SpringBoot2和ProjectReactor。SpringCloudGateway旨在提供一种简单而有效的方式来对API进行路由,并为他们提供切面,例如:安全性,监控/指标和弹性等。1.......
  • 如何使用ComPDFKit Web SDK添加在线编辑PDF文档功能
    文档编辑功能提供了一系列的操作页面的能力,使用户能够控制文档结构,并调整文档的布局和格式,确保文档内容以合理有序的方式精准呈现。ComPDFKit文档编辑的优势插入或删除页面: 向文档插入或删除页面,以满足特定的排版要求。文档结构调整: 调整页面排列顺序或旋转方向,以满足特定......
  • 代码随想录算法训练营第十八天 | 112. 路径总和,113. 路径总和ii ,106.从中序与后序遍
     513.找树左下角的值 已解答中等 相关标签相关企业 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层最左边 节点的值。假设二叉树中至少有一个节点。 示例1:输入:root=[2,1,3]输出:1示例2:输入:[1,2,3,4,null,5,6,n......
  • VOYAGE: 在文档数据库中持久化对象
    VOYAGE:在文档数据库中持久化对象Voyage是由EstebanLorenzano开发的一个小型持久化框架,它是对象和持久化机制之间的一个中间层,通是NoSQL数据库。这本小册子最初是由EstebanLorenzano撰写的一些博客文章,JohanFabry和StéphaneDucasse对这些文章进行了广泛的修改,包括SabineMa......
  • N叉树遍历模板
    N叉树(N-aryTree)的类型和代码模板与二叉树有些相似,但由于N叉树具有多个子节点,因此在遍历和节点定义上有所不同。以下是N叉树的类型和相应的代码模板:N叉树节点的定义:classNode:def__init__(self,val=None,children=None):self.val=valself.children......
  • 【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......
  • 【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......