BeautifulSoup 返回网页标签的名称、父标签名称、行号、完整路径

应用beatifulsoup完成网页标签的名称、父标签名称、行号、完整路径的获取,这里reversed实现对网页标签的遍历。

示例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>
</head>
<body>
<div id="menutab_8_2" style="">
<link href="../Template/Default/ztbzx/css/style.css" rel="stylesheet" type="text/css"/>
<script src="../template/default/js/jquery-1.11.0.min.js" type="text/javascript"></script>
<script>function iFrameHeight() {var total = document.getElementById("ZtbggxxDetail_LblCount").innerHTML;for(var i=0;i<parseInt(total);i++){var ifm = document.getElementById("iframejjgz"+i.toString());var subWeb = document.frames ? document.frames["iframejjgz"+i.toString()].document : ifm.contentDocument;if (ifm != null && subWeb != null) {ifm.height = subWeb.body.scrollHeight;}}}</script>
<div id="ZtbbgggDetail_jsgc1_text"><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="center"><h2 class="article-title">海运区2020年扶贫道路业绩公示</h2></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr> <td align="center" style="line-height: 25px; color: #4e4e4e;">【信息日期:2020/01/22】</td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td style="text-align:left;"><div><p>
</p><p align="center" style="margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;margin-left:0.0000pt;padding:0pt 0pt 0pt 0pt ;text-align:left;font-family:Calibri;font-size:12.0000pt;margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;
margin-left:0.0000pt;padding:0pt 0pt 0pt 0pt ;
text-align:center;vertical-align:baseline;"><b><span style="font-family:宋体;color:rgb(51,51,51);
letter-spacing:0.0000pt;font-weight:bold;text-transform:none;
font-style:normal;font-size:14.0000pt;"><font face="宋体">海运区</font>2020年扶贫道路建设项(公平路)施工中标候选人补充业绩公示</span></b></p>
<div align="center">
<table border="0" cellspacing="0" style="font-family:'Times New Roman';font-size:10.0000pt;border-collapse:collapse;width:435.8000pt;border:none;">
<tbody>
<tr style="height:16.2000pt;">
<td style="width:72.2500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;background:rgb(255,255,255);" valign="center" width="96">
<p align="center" style="margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;margin-left:0.0000pt;padding:0pt 0pt 0pt 0pt ;text-align:left;font-family:Calibri;font-size:12.0000pt;margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;margin-left:0.0000pt;text-align:center;vertical-align:baseline;"><b><span style="font-family:宋体;color:rgb(51,51,51);letter-spacing:0.0000pt;font-weight:bold;text-transform:none;font-style:normal;font-size:12.0000pt;">招生人</span></b></p>
</td>
<td style="width:363.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;background:rgb(255,255,255);" valign="center" width="484">
<p align="center" style="margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;margin-left:0.0000pt;padding:0pt 0pt 0pt 0pt ;text-align:left;font-family:Calibri;font-size:12.0000pt;margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;margin-left:0.0000pt;text-align:center;"><span style="font-family:宋体;color:rgb(51,51,51);font-size:12.0000pt;">东临分局</span></p>
</td>
</tr></tbody>
</table>
</div>
<p align="justify" style="margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;margin-left:0.0000pt;padding:0pt 0pt 0pt 0pt ;text-align:left;font-family:Calibri;font-size:12.0000pt;margin-top:0.0000pt;margin-right:0.0000pt;margin-bottom:0.0000pt;
margin-left:0.0000pt;text-indent:28.1000pt;padding:0pt 0pt 0pt 0pt ;
text-align:justify;text-justify:inter-ideograph;
"><b><span style="font-family:宋体;color:rgb(51,51,51);
font-weight:bold;font-size:12.0000pt;"><font face="宋体">若招生人对上述结果有质疑,请在公示期内,首先以书面形式向本项目招标人提出质疑,联系电话:</font>3258-23387677;也可以向招标代理公司反映,联系电话:5658-</span></b><b><span style="font-family:宋体;color:rgb(51,51,51);
font-weight:bold;font-size:12.0000pt;">58956709</span></b><b><span style="font-family:宋体;color:rgb(51,51,51);
font-weight:bold;font-size:12.0000pt;"><font face="宋体">;接受投诉单位及电话:交易监督管理局电话:</font>3258-23387677。</span></b></p>
<br/>
<p></p></div></td></tr></tbody></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td><div></div></td></tr></tbody></table></div>
</div>
</body></html>

代码部分:

from bs4 import BeautifulSoup
import os
import re
import pandas as pd
from bs4 import NavigableString,Comment#返回节点的名称Full Xpath
def getelmentpath(inFile):for n in range(0, 1, 1):f = open(inFile, encoding="utf-8")bindid=os.path.basename(inFile).split('.')[0] + '_'bs = BeautifulSoup(f.read(), 'html.parser') for elem in bs.find('div', {'id': 'menutab_8_2'}).find_all(True):      root_childs = '.'.join(reversed([p.name for p in elem.parentGenerator() if p])) print(elem.name+"\t"+elem.parent.name+"\t"+str(elem.sourceline)+"\t"+str(root_childs+"."+elem.name))f.close()if __name__ == '__main__':getelmentpath(r'D:/demo.html')

执行结果:

link    div     9       [document].html.body.div.link
script  div     10      [document].html.body.div.script
script  div     11      [document].html.body.div.script
div     div     24      [document].html.body.div.div
table   div     24      [document].html.body.div.div.table
tbody   table   24      [document].html.body.div.div.table.tbody
tr      tbody   24      [document].html.body.div.div.table.tbody.tr
td      tr      24      [document].html.body.div.div.table.tbody.tr.td
h2      td      24      [document].html.body.div.div.table.tbody.tr.td.h2
table   div     24      [document].html.body.div.div.table
tbody   table   24      [document].html.body.div.div.table.tbody
tr      tbody   24      [document].html.body.div.div.table.tbody.tr
td      tr      24      [document].html.body.div.div.table.tbody.tr.td
table   div     24      [document].html.body.div.div.table
tbody   table   24      [document].html.body.div.div.table.tbody
tr      tbody   24      [document].html.body.div.div.table.tbody.tr
td      tr      24      [document].html.body.div.div.table.tbody.tr.td
div     td      24      [document].html.body.div.div.table.tbody.tr.td.div
p       div     24      [document].html.body.div.div.table.tbody.tr.td.div.p
p       div     25      [document].html.body.div.div.table.tbody.tr.td.div.p
b       p       27      [document].html.body.div.div.table.tbody.tr.td.div.p.b
span    b       27      [document].html.body.div.div.table.tbody.tr.td.div.p.b.span
font    span    29      [document].html.body.div.div.table.tbody.tr.td.div.p.b.span.font
div     div     30      [document].html.body.div.div.table.tbody.tr.td.div.div
table   div     31      [document].html.body.div.div.table.tbody.tr.td.div.div.table
tbody   table   33      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody
tr      tbody   34      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr
td      tr      35      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr.td
p       td      39      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr.td.p
b       p       41      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr.td.p.b
span    b       41      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr.td.p.b.span
td      tr      45      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr.td
p       td      49      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr.td.p
span    p       51      [document].html.body.div.div.table.tbody.tr.td.div.div.table.tbody.tr.td.p.span
p       div     59      [document].html.body.div.div.table.tbody.tr.td.div.p
b       p       62      [document].html.body.div.div.table.tbody.tr.td.div.p.b
span    b       62      [document].html.body.div.div.table.tbody.tr.td.div.p.b.span
font    span    63      [document].html.body.div.div.table.tbody.tr.td.div.p.b.span.font
b       p       63      [document].html.body.div.div.table.tbody.tr.td.div.p.b
span    b       63      [document].html.body.div.div.table.tbody.tr.td.div.p.b.span
b       p       64      [document].html.body.div.div.table.tbody.tr.td.div.p.b
span    b       64      [document].html.body.div.div.table.tbody.tr.td.div.p.b.span
font    span    65      [document].html.body.div.div.table.tbody.tr.td.div.p.b.span.font
br      div     66      [document].html.body.div.div.table.tbody.tr.td.div.br
p       div     67      [document].html.body.div.div.table.tbody.tr.td.div.p
table   div     67      [document].html.body.div.div.table
tbody   table   67      [document].html.body.div.div.table.tbody
tr      tbody   67      [document].html.body.div.div.table.tbody.tr
td      tr      67      [document].html.body.div.div.table.tbody.tr.td
div     td      67      [document].html.body.div.div.table.tbody.tr.td.div

BeautifulSoup 返回网页标签的名称、父标签名称、行号、完整路径相关推荐

  1. css中的继承,子标签会继承父标签的某些样式(话说自己以前还真的没有注意到过继承)

    css有三大特性:层叠.继承.优先级.这里说一下继承 继承的好处是:恰当地使用继承,可以简化代码,降低css样式的复杂性. 能够继承的有大部分text- font- line- 这些前缀开头的.col ...

  2. Python 库学习笔记—— BeautifulSoup 处理子标签、后代标签、兄弟标签和父标签

    首先,我们来看一个简单的网页https://www.pythonscraping.com/pages/page3.html,打开后: 右键"检查"(谷歌浏览器)查看元素: 用导航树 ...

  3. javaweb带父标签的自定义标签

    1.完整的示例代码:要实现的功能是父标签中有name属性,子标签将父标签的name属性值打印到jsp页面上. 1.1 父类和子类的标签处理器类 testParentTag.java package c ...

  4. java自定义jsp标签_Javaweb自定义jsp标签

    自定义标签 用户定义的一种自定义的jsp标记,当一个含有自定义标签的jsp页面被jsp引擎编译成Servlet时,tag标签被转化成了对一个称为标签处理类的对象的操作.于是当jsp页面被jsp引擎转化 ...

  5. html 选择自动增加行数,为网页中的源代码自动设置行号

    本文演示了如何为网页中的源代码块自动设置行号. 现在,我们准备在网页中显示C++的Hello world.这段著名的代码如下所示: #include intmain() { std::cout < ...

  6. [python] 常用正则表达式爬取网页信息及分析HTML标签总结

    这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...

  7. xpath 取标签下所有文字内容_GNE 预处理技术——如何移除特定标签但是保留文字到父标签...

    GNE 预处理技术--如何移除特定标签但是保留文字到父标签​mp.weixin.qq.com 在开发新闻网页正文通用抽取器GNE的过程中,需要对目标网页的源代码进行一些预处理,从而提高正文抓取的准确性 ...

  8. 常用正则表达式爬取网页信息及分析HTML标签总结

    这篇文章主要是介绍Python爬取网页信息时,经常使用的正则表达式及方法.它是一篇总结性文章,实用性比较大,主要解决自己遇到的爬虫问题,也希望对你有所帮助~ 当然如果会Selenium基于自动化测试爬 ...

  9. Highmaps网页图表教程之数据标签与标签文本

    Highmaps网页图表教程之数据标签与标签文本 Highmaps数据标签 数据标签用于在地图图表上展现节点对应的数据.数据标签展现数据是静态的,只要节点一加载,数据标签就会出现在节点附近.在High ...

最新文章

  1. 在Java中使用xpath对xml解析
  2. VS如何更改项目类型?
  3. 一个简易的webpack开发环境
  4. 基于Boost::beast模块的协程WebSocket 服务器
  5. 【OpenJ_Bailian - 2711 】 合唱队形(dp,枚举中间顶点)
  6. amd为什么还用针脚_英特尔的针脚都取消了,为什么AMD的还没动静?
  7. 传统认知PK网络认知 刚子扯谈烤串认知
  8. Mac m1搭建python深度学习环境+pycharm
  9. win10电脑虚拟网络设置方法
  10. 牛顿插值法的Python程序
  11. 学习双拼必看(最全教程):双拼输入法的心得以及快速入门办法
  12. 小白学python——函数1
  13. 高速的二舍八入三七作五_详解青银高速市区段计费方法人工车道比ETC贵3元
  14. java相关资料下载
  15. ad Hoc打包测试
  16. 安徽省宿州市谷歌卫星地图下载
  17. Wah!Cade-游戏模仿器
  18. RK3399 ,64位,Ubuntu16.04系统安装ROS-kinetic方法总结
  19. 多年iOS开发经验总结(转)
  20. linux修改磁盘标签,Ubuntu挂载硬盘,修改卷标

热门文章

  1. wxWidgets:wxLogNull类用法
  2. boost::sort模块使用 string_sort 使用复杂的多部分键对结构进行排序
  3. boost::regex模块在 cpp 文件中搜索类定义,使用全局数据的测试程序
  4. boost::ratio_divide相关的测试程序
  5. boost::replace_copy相关的测试程序
  6. boost::mpi模块实现测试mpi版本
  7. boost::mp11::tuple_transform相关用法的测试程序
  8. boost::geometry::srs::spar用法的测试程序
  9. VTK:结构化网格之StructuredGrid
  10. VTK:PolyData之PolyDataToUnstructuredGrid