目录

​​                                 BeautifulSoup children descendants对比​​

​​1 简介​​

​​2 验证​​

​​2.1 数据说明​​

​​2.2 案例说明​​

​​2.3 代码验证​​

​​2.4结果输出​​

​​3 其它​​


                    BeautifulSoup children descendants对比

1 简介

1 children、descendants是beatifulsoup里常见的遍历子孙的方法,它们的区别在于children仅遍历所有子节点而decendants会迭代遍历children节点及其子孙节点。

2 适应人群:有html和python基础者

2 验证

2.1 数据说明

假设有child.html文件且内容如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta content="webkit" name="renderer">
<title>资源交易网</title>
<link href="../template/default/css/common.css" rel="stylesheet">
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td align="center">
<h2 class="article-title">
<span id="ZtbzbggDetail_jsgc1_title">农业农村局 农业生产经营主体及其产品追溯体系建设项目公告</span>
</h2>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" id="ZtbzbggDetail_jsgc1_date" width="100%">
<tbody>
<tr>
<td align="center" style="line-height: 25px; color: #4e4e4e;">
【信息日期:<span id="ZtbzbggDetail_jsgc1_LblInfoDate">2019/12/31</span>】
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td style="text-align:left;">
<div id="ZtbzbggDetail_jsgc1_content">
<p align="center" style="background: rgb(255, 255, 255); margin: 0pt; text-align: center; line-height: 18pt; font-family: "Times New Roman"; font-size: 10.5pt; -ms-text-justify: inter-ideograph;">
<b>
<span style="font-family: 宋体; font-size: 22pt; font-weight: bold;">
<font face="宋体">农业农村局农业生产经营主体及其产品追溯体系建设项目</font>
</span>
</b>
<b>
<span style="font-family: 宋体; font-size: 22pt; font-weight: bold;">
<font face="宋体">公开公告</font>
</span>
</b>
</p>
<p style="background: rgb(255, 255, 255); margin: 0pt; text-align: justify; line-height: 28pt; text-indent: 32pt; font-family: "Times New Roman"; font-size: 10.5pt; -ms-text-justify: inter-ideograph;"><span style="color: rgb(0, 0, 0); font-family: 仿宋_GB2312; font-size: 16pt;"><font face="仿宋_GB2312">政府采购中心</font></span><span style="color: rgb(0, 0, 0); font-family: 仿宋_GB2312; font-size: 16pt;"><font face="仿宋_GB2312">受</font></span><span style="color: rgb(0, 0, 0); font-family: 仿宋_GB2312; font-size: 16pt;"><font face="仿宋_GB2312">农业农村局</font></span><span style="color: rgb(0, 0, 0); font-family: 仿宋_GB2312; font-size: 16pt;"><font face="仿宋_GB2312">的委托,现对</font> </span><span style="color: rgb(0, 0, 0); font-family: 仿宋_GB2312; font-size: 16pt;"><font face="仿宋_GB2312">农业农村局农业生产经营主体及其产品追溯体系建设项目</font></span><span style="color: rgb(0, 0, 0); font-family: 仿宋_GB2312; font-size: 16pt;"><font face="仿宋_GB2312">进行公开,欢迎具备条件的国内投标供应商参加投标。</font></span></p>
<br>
<p>附件如下:</p>
</div>
</td>
</tr>
</tbody>
</table>

</body>
</html>

2.2 案例说明

需求一:取得div id是"ZtbzbggDetail_jsgc1_content"下的所有子节点的标签名和文本

需求二:取得div id是"ZtbzbggDetail_jsgc1_content"下的所有子孙节点的标签名和文本

2.3 代码验证

from bs4 import BeautifulSoup

# Serial descendants and children
from bs4 import NavigableString,Comment
def descendantschild(inFile):
for n in range(0, 1, 1):
f = open(inFile, encoding="utf-8")
bs = BeautifulSoup(f.read(), 'html.parser')
divroot = bs.find('div', {'id': 'ZtbzbggDetail_jsgc1_content'})
print("***************tag'children output***************")
for tag in divroot.children:
if isinstance(tag, NavigableString):
continue
else:
print(str(tag.name+"\t"+tag.get_text())
print("***************tag'descendants output***************")
for tag in divroot.descendants:
if isinstance(tag, NavigableString):
continue
else:
print(tag.name+"\t"+tag.get_text())



if __name__ == '__main__':
descendantschild(r'D:/child.html')

2.4结果输出

Children输出:

BeautifulSoup children descendants对比_爬虫

***************tag'children output***************
34 p


农业农村局农业生产经营主体及其产品追溯体系建设项目




公开公告



46 p 政府采购中心受农业农村局的委托,现对 农业农村局农业生产经营主体及其产品追溯体系建设项目进行公开,欢迎具备条件的国内投标
供应商参加投标。
47 br
48 p 附件如下:

 Descendants输出

BeautifulSoup children descendants对比_html_02

*********tag'descendants output***************
p


农业农村局农业生产经营主体及其产品追溯体系建设项目




公开公告



b

农业农村局农业生产经营主体及其产品追溯体系建设项目


span
农业农村局农业生产经营主体及其产品追溯体系建设项目

font 农业农村局农业生产经营主体及其产品追溯体系建设项目
b

公开公告


span
公开公告

font 公开公告
p 政府采购中心受农业农村局的委托,现对 农业农村局农业生产经营主体及其产品追溯体系建设项目进行公开,欢迎具备条件的国内投标供应商参
加投标。
span 政府采购中心
font 政府采购中心
span 受
font 受
span 农业农村局
font 农业农村局
span 的委托,现对
font 的委托,现对
span 农业农村局农业生产经营主体及其产品追溯体系建设项目
font 农业农村局农业生产经营主体及其产品追溯体系建设项目
span 进行公开,欢迎具备条件的国内投标供应商参加投标。
font 进行公开,欢迎具备条件的国内投标供应商参加投标。
br
p 附件如下:

3 其它

暂无。