[爬虫]python下的xpath清洗数据之html数据清洗
【摘要】
目录
源起
分析
解决
总结
源起
现在我们面对一些爬虫数据,特别是对于web网页的爬取的时候,网页总有一些不规整的数据来导致拿数据的麻烦,比如如下这种
<html>
<div>
<p>111</p>
<p>222</p>
<p>333</p>
<p>...
目录
- 源起
- 分析
- 解决
- 总结
源起
现在我们面对一些爬虫数据,特别是对于web网页的爬取的时候,网页总有一些不规整的数据来导致拿数据的麻烦,比如如下这种
<html> <div> <p>111</p> <p>222</p> <p>333</p> <p>444 <script> eeeeeeeeeeee </script> </p> <p>555 <script> aabbccddd </script> </p> </div> </html>
我只想拿到111,222,333,444,555这些有效的信息,因为有些p标签里面会引入script
元素,导致我们还要在后期清洗,比较麻烦
分析
首先拿到问题我们就可以本能的想至少两种方式,如果当成是文本处理,使用排除掉script这些文本,另外我们可以直接移除掉这些script元素,这里我不推荐使用正则,毕竟我们拿到一个特定的环境,比如lxml 库就可以很轻松的处理这些文档,使用正则后期维护困难,另外,你过两个星期之后你也不会知道你当时写的正则是什么意思
解决
还是直接上代码吧
<br /># -*- coding: utf-8 -*- from lxml import html from lxml.html.clean import Cleaner html_str = """ <html> <div> <p>111111</p> <p>222222</p> <p>333333</p> <p>44444 <script> eeeeeeeeeeee </script> </p> <p>665666 <script> aabbccddd </script> </p> </div> </html> """ def clean_script(): cleaner = Cleaner() cleaner.javascript = True # This is True because we want to activate the javascript filter cleaner.style = True # clean the style element tree = html.fromstring(html_str) print html.tostring(cleaner.clean_html(tree)) def remove_node(): tree = html.fromstring(html_str) ele = tree.xpath('//script') for e in ele: e.getparent().remove(e) print html.tostring(tree) if __name__ == '__main__': remove_node()
输出结果
<html> <body><div> <p>111111</p> <p>222222</p> <p>333333</p> <p>44444 </p> <p>665666 </p> </div> </body></html>
总结
本次主要介绍了常见的html 数据清洗方法,介绍了lxml 一些常用操作和方法,希望对于大家清洗数据的时候有帮助
文章来源: brucedone.com,作者:大鱼的鱼塘,版权归原作者所有,如需转载,请联系作者。
原文链接:brucedone.com/archives/1149
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)