python - 如何清除html中 反复嵌套的标签

查看:247
本文介绍了python - 如何清除html中 反复嵌套的标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在帮人爬一个奇葩网站的数据中,发现一些网页的表格 无论是用BeautifulSoup 还是 lxml解析都是失败 或者不完整的。
查看页面源码发现,表格最后一列的所有数据 虽然都只有一个 '-',但是内容却是藏在非常大量的无用标签底下。
其他列的数据 只是在table/tbody/tr/td/div/span 下
仅这列的数据 是在table/tbody/tr/td/div/span/+(非常多层的div span)下。

删除了部分多于的内容后,html文件百度网盘链接在此,
问题html文件

总的来说,我的问题就是,如何判别这种无限叠加的无效标签,并替换为能被BS或者lxml读取的格式?

现在正在试验的是 lxml中Cleaner类
page = open(test_path, encoding='utf-8').read()
cleaner = Cleaner(style=True, remove_tags=['div','span', 'font'])
page = cleaner.clean_html(page)

如果读入内容仅一层 tr的话倒是能正确清理了!
但是如果把整个表的html读入,进行清理,不知道因为什么原因。
只能读入到嵌套的地方未知,后续的内容全部被删。
初步怀疑是python的递归限制?

正在试验xpath。
试验失败。
通过xpath读取tabl下的tr标签 查看数量。
发现也仅能读取嵌套位置前的tr标签,后续标签无法查询。

解决方案

问题解决了。
虽然之前试验的方法 全部无效。
最终还是用BeautifulSoup来处理。
只是修改了python限制的递归层数。

sys.setrecursionlimit(5000) 用来处理这种愚蠢的无限嵌套。

这篇关于python - 如何清除html中 反复嵌套的标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆