Python BeautifulSoup(lxml)处理长字节与长字符串存在异常不一致问题
Python 3.6.5 + BeautifulSoup 4.6.0 + lxml 4.2.1 长内容解析不一致问题
最近我在组合使用Python 3.6.5、BeautifulSoup 4.6.0和lxml 4.2.1解析器时,发现了一个挺奇怪的现象:当处理长度超过16384(也就是2^14)的字节对象和字符串时,两者的解析行为存在不一致性。
举个实际例子:我从MIT官网下载了《奥赛罗》的文本内容,分别把原始的字节形式,以及解码后的字符串形式传入BeautifulSoup。因为这份文档里没有多字节字符,所以字节对象和字符串的长度是完全一致的,但最终的解析结果却出现了差异。
下面是复现这个问题的代码示例:
from bs4 import BeautifulSoup import urllib # 此处替换为MIT官网《奥赛罗》文本的实际URL url = "https://example.com/othello.txt" # 获取原始字节内容 response = urllib.request.urlopen(url) byte_content = response.read() # 解码为UTF-8字符串(文档无多字节字符,长度与byte_content一致) str_content = byte_content.decode('utf-8') # 分别用两种内容初始化BeautifulSoup soup_from_bytes = BeautifulSoup(byte_content, 'lxml') soup_from_str = BeautifulSoup(str_content, 'lxml') # 对比两者的解析结果会发现不一致
内容的提问来源于stack exchange,提问作者DYZ
相关产品推荐
相关产品推荐

