写了一个类,主要用于解析html文本的对称的标签结构。

通过输入tag名称,解析对应HTML文本,查找对应tag的层级数,并可以通过层级数得出对应的tag内容。写的比较粗糙,后续如果用到在慢慢改进。

代码如下:

#!/usr/bin/python3
#encoding = UTF-8
import re####################################
#通过解析HTML文本,获取指定tag的层数
###################################
class htmltaganalysis(object):def __init__(self,html,tag):self.html = htmlself.tag = tag#正则匹配,还需要调优def tagdec(self,html,tag):pa = re.compile(tag,re.I|re.S|re.M)return re.finditer(pa,html)#返回数组[{'content':'xx','layer',x}....]def GetTagContent(self):divfinditers = self.tagdec(self.html,'<'+ self.tag)divfinditere = self.tagdec(self.html,'</'+ self.tag + '>')startlist = []endlist = []arr = []for n in divfinditere:endlist.append(n.end())for m in divfinditers:startlist.append(m.start())for j in range(len(endlist)):for i in range(len(startlist)-1):if startlist[i] < endlist[j] and startlist[i + 1] > endlist[j] :arr.append([startlist[i] ,endlist[j]])startlist.remove(startlist[i])continuefor k in range(len(startlist)):#print(startlist[k],endlist[len(endlist)-k-1])arr.append([startlist[k],endlist[len(endlist)-k-1]])#按第一列进行排序arr = sorted(arr, key=lambda x:x[0])arrcontent = []for i in range(len(arr)):#print(arr[i],self.Getlayer(arr,i,1))dic = dict()dic['content'] = self.html[arr[i][0]:arr[i][1]]dic['layer'] = self.Getlayer(arr,i,1)arrcontent.append(dic)return arrcontent#计算数组在二维数组中的层级def Getlayer(self,arr,i,layer):#print(arr[i])zz = Falseif i > 0 and i <len(arr):for j in range(i - 1 ,-1,-1):if arr[i][0] > arr[j][0] and arr[i][1] < arr[j][1]:zz = Truelayer = layer + 1#print(arr[j])#breakreturn self.Getlayer(arr,j,layer)if zz:return layerelse:return layer#获取对应层级的标签文本def GetContentForLayer(self,layer = 1):arr = []for dic in self.GetTagContent():if dic['layer'] == layer:arr.append(dic['content'])return arr#获取最高层级def GetTopLayer(self):tplayer = 0for dic in self.GetTagContent():if tplayer < dic['layer']:tplayer = dic['layer']return tplayer

使用示例:

html = '<div id="cnblogs_post_body"><div class="x-wiki-content x-content"></div></div>'
htmltaganalysis = htmltaganalysis(html,'div')
print(htmltaganalysis.GetTopLayer())
print(htmltaganalysis.GetContentForLayer(1))
print(htmltaganalysis.GetContentForLayer(2))

结果:

2
['<div id="cnblogs_post_body"><div class="x-wiki-content x-content"></div></div>']
['<div class="x-wiki-content x-content"></div>']

备注:欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

转载于:https://www.cnblogs.com/yinsjun/p/7872953.html

使用python3 解析html对称标签相关推荐

  1. python3解析库pyquery

    pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语 ...

  2. 用Python3解析html的几种操作方式,你都会用吗?

    解析html是爬虫后的重要的一个处理数据的环节.一下记录解析html的几种方式. 先介绍基础的辅助函数,主要用于获取html并输入解析后的结束 #把传递解析函数,便于下面的修改 def get_htm ...

  3. Spring源码解析:自定义标签的解析过程

    2019独角兽企业重金招聘Python工程师标准>>> spring version : 4.3.x Spring 中的标签分为默认标签和自定义标签两类,上一篇我们探究了默认标签的解 ...

  4. html调用python_对Python3 解析html的几种操作方式小结

    解析html是爬虫后的重要的一个处理数据的环节.一下记录解析html的几种方式. 先介绍基础的辅助函数,主要用于获取html并输入解析后的结束 #把传递解析函数,便于下面的修改 def get_htm ...

  5. python3 解析文件类型filetype

    python3 解析文件类型filetype 更多相关文件头可查询https://filesignatures.net/ 以下是个人理解,错了请大神轻喷 文本文件例如txt,java,html,js ...

  6. 简单解析表格table标签的用法

    简单解析表格table标签的用法 1.表格加上边框并且效果如下图所示: cellspacing(单元格间距): 表格边框与单元格的边框之间的缝隙 cellpadding(单元格边距): 单元格内容与单 ...

  7. python3 解析html_Python3.x网页抓取HTMLParser

    HTML操作是编程中很重要的一块,下面用Python3.x中的html.parser中的HTMLParser类来进行HTML的解析. HTMLParser类定义及常用方法 标准库中的定义 class ...

  8. python中实现网页解析的三种工具分别是_对Python3 解析html的几种操作方式小结

    python3 能解析html吗 python3爬虫获取HTML文档时的问题.你羡慕小编一身潇洒无牵无挂小编却羡慕你有家有他有人等你回家 anaconda环境下python获取一个网站的HTML,不知 ...

  9. python3解析json数据_Python3高级教程

    Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. Python3 中可以使用 ...

最新文章

  1. php 求 相似 比,php计算title标题相似比
  2. Maven发布封装到中央仓库时候报错:no default secret key: No secret key
  3. 算法-数组中重复的数字
  4. QQ红包源码 大转盘抽奖源码下载 微信红包源码
  5. python turtle工具箱_python 库之 turtle(图形绘制) 开启新的快乐源泉
  6. 计算机专业课程项目教学教学设计,高职旅游管理专业计算机课程项目化教学设计...
  7. 转:Secure CRT 中文乱码问题解决
  8. Openlayer:学习笔记之控件
  9. (转)程序员如何快速准备面试中的算法
  10. Jmeter 及 JDK 下载 安装教程
  11. 51单片机学习——1天学完普中基本实验例程,走马观花式学习,大家切勿效仿。
  12. Java网络编程——UDP编程
  13. 『运筹OR帷幄』——60w运筹学|优化理论|人工智能|数据科学的技术原创和交流社区...
  14. 一文看懂主流区块链攻击底层逻辑 | 博文精选
  15. Labview优化技巧
  16. windows配置环境变量和path环境后即时生效
  17. Magneto插件整理
  18. Oracle官文,明确20c不能用于生产环境
  19. Alibaba Cloud Linux版本linux下mysql8.0安装
  20. 前端vue+element ie兼容性问题

热门文章

  1. vuex 编译项目_俺咋能看懂公司前端项目?
  2. u3d 动态 随机 地图_我的世界1.12.2模组教程:VoxelMap小地图新老玩家辅助神器
  3. 将每个字典一行一行的添加到pd.DataFrame中
  4. arma找不到合适的模型_TAP300R系列直角方肩立铣刀,您还在为找不到合适刀具发愁吗?...
  5. 正则表达式中的字符类
  6. 【存储知识学习】第十章- 存储架构演进过程《大话存储》阅读笔记
  7. Mac中word插入图片保持原来的清晰度
  8. 深入浅出地解读Python迭代器和生成器
  9. 信息系统项目管理师-常用技术标准考点笔记
  10. Android中实现一个简单的逐帧动画(附代码下载)