数据清洗:利用lxml移除html中的元素
【摘要】 有一段html文本
<html> <head> <title>这是标题</title> </head> <body> <div>这是内容</div> <div>要移除的内容</div> </body>
</html>
1234...
有一段html文本
<html> <head> <title>这是标题</title> </head> <body> <div>这是内容</div> <div>要移除的内容</div> </body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
我希望把 <div>要移除的内容</div>
移除
安装lxml
pip install lxml
- 1
代码实例
# -*- coding: utf-8 -*-
from lxml import etree
text = """
<html> <head> <title>这是标题</title> </head> <body> <div>这是内容</div> <div>要移除的内容</div> </body>
</html>"""
tree = etree.fromstring(text)
# 返回一个列表
remove_tags = tree.xpath('//div[last()]')
if remove_tags: remove_tag = remove_tags[0] remove_tag.getparent().remove(remove_tag)
print(etree.tounicode(tree))
"""
<html> <head> <title>这是标题</title> </head> <body> <div>这是内容</div> </body>
</html>
"""
- 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
最后也实现了我的要求,可以封装为单独的函数,以便调用
from lxml import html, etree
def remove_elements(html, xpath): """ 移除html 文本中的元素 :param html: str :param xpath: str :return: str """ # tree = etree.fromstring(html)
tree = html.fragment_fromstring(f'<div>{text}</div>') # 返回一个列表 remove_tags = tree.xpath(xpath) for remove_tag in remove_tags: remove_tag.getparent().remove(remove_tag) return etree.tounicode(tree)
if __name__ == '__main__': text = """ <html> <head> <title>这是标题</title> </head> <body> <div>这是内容</div> <div>要移除的内容</div> </body> </html>""" print(remove_elements(text, '//div[last()]'))
- 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
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/105296938
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)