使用python3 解析html对称标签
生活随笔
收集整理的這篇文章主要介紹了
使用python3 解析html对称标签
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫了一個類,主要用于解析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对称标签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探讨.NET Core数据进行3DES加
- 下一篇: VMware vSphere/vCent