Python使用爬虫获取文本内容时,经常会发现获取到的文本包含了HTML注释,这时想要去除这些注释,就需要一些方法,自己写逻辑显然比较麻烦而且效果不稳定,这里主要用到了w3lib库的html模块
1.remove_tags()
移除指定标签,不移除内部文本
from w3lib import html
doc = '''
<div>
<a>我是超链接</a>
<h1>我是标题</h1>
</div>
'''
result = html.remove_tags(doc)
print(result)
PS D:\workspace\github\python\python-demo\util\html> python .\tags.py
我是超链接
我是标题
可以看到所有的标签都被移除了,只剩下标签下的文本节点,包括了空白
可以使用参数which_ones来指定要移除的标签
from w3lib import html
doc = '''
<div>
<a>我是超链接</a>
<h1>我是标题</h1>
</div>
'''
result = html.remove_tags(doc,which_ones=('div','a'))
print(result)
PS D:\workspace\github\python\python-demo\util\html> python .\remove_tags.py
我是超链接
<h1>我是标题</h1>
PS D:\workspace\github\python\python-demo\util\html>
看到指定了div、a标签都被移除了
2.remove_tags_with_content()
移除标签已经其内容
from w3lib import html
doc = '''
<div>
<a>我是超链接</a>
<h1>我是标题</h1>
我是div的内容
</div>
'''
result = html.remove_tags_with_content(doc,which_ones=('h1','a'))
print(result)
PS D:\workspace\github\python\python-demo\util\html> python .\remove_tags_with_content.py
<div>
我是div的内容
</div>
可以看到a、h1标签的文本内容都被移除了,但是空白还在,而且测试中发现,如果直接移除外层标签div,则内部标签及其内容都会被完全移除
3.remove_comments()
移除HTML注释
from w3lib import html
doc = '''
<div>
哈哈哈哈
<!--我是网页注释-->
</div>
'''
result = html.remove_comments(doc)
print(result)
PS D:\workspace\github\python\python-demo\util\html> python .\remove_comments.py
<div>
哈哈哈哈
</div>
除了注释被移除了,其他的都还在
4.remove_entities
移除所有HTML实体,实际上是进行替换,将HTML实体替换为原本的字符
from w3lib import html
doc = '''
大于号 >
小于号 <
且 &
引号 "
单引号 '
分 ¢
磅 £
元 ¥
欧元 €
小节 §
版权 ©
注册商标 ®
商标 ™
乘号 ×
除号 ÷
'''
result = html.remove_entities(doc)
print(result)
PS D:\workspace\github\python\python-demo\util\html> python .\remove_entities.py
大于号 >
小于号 <
且 &
引号 "
单引号
分 ¢
磅 £
元 ¥
欧元 €
小节 §
版权 ©
注册商标 ®
商标 ™
乘号 ×
除号 ÷