目录
- 源起
- 分析
- 解决
- 总结
源起
现在我们面对一些爬虫数据,特别是对于web网页的爬取的时候,网页总有一些不规整的数据来导致拿数据的麻烦,比如如下这种
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<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 库就可以很轻松的处理这些文档,使用正则后期维护困难,另外,你过两个星期之后你也不会知道你当时写的正则是什么意思
解决
还是直接上代码吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<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() |
输出结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<html> <body><div> <p>111111</p> <p>222222</p> <p>333333</p> <p>44444 </p> <p>665666 </p> </div> </body></html> |
总结
本次主要介绍了常见的html 数据清洗方法,介绍了lxml 一些常用操作和方法,希望对于大家清洗数据的时候有帮助
拜读了,多多学习总是好的!
好好学习,天天向上 ~
这篇有点水了