在帮人爬一个奇葩网站的数据中,发现一些网页的表格 无论是用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) 用来处理这种愚蠢的无限嵌套。