python html源码压缩,使用 lxml etree

用爬虫抓下来的html源码,一般都有很多 换行符和空格,如果相对这些空字符都去掉,也就是对源码做一个压缩,要怎么做呢?

有人说可以直接用正则去替换

import re

new_txt = re.sub(r">\s+<", "><", text)

但这样假如标签中有文本存在模式类似 ">\s+<" 的文本,原本的结构就被破坏了,因此最好不要用正则直接去修改 html 源码,很容易造成误差

逛了一圈 stockflow,我找到一个方案,使用 lxml.etree遍历每个标签节点,对其中的 tail和text 做一个 strip操作,如下:

from lxml import etree

def remove_tag_space(html_text):
	tree = etree.HTML(html_text)
	for tag in tree.iter():
		if tag.tail:
			tag.tail = tag.tail.strip()
		if tag.text:
			tag.text = tag.text.strip()
	return etree.tostring(tree, encoding="unicode")

效果如下: 

注意一点,这方法如果是 <br>、<hr>、<img>、<input>、<param>、<meta>、<link> 等单标签,可能还是会修改原文本,我的做法是做一个白名单列表,如果是单标签就跳过,如果你有更好的做法,欢迎在评论区留言,共同探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值