访问elemen文本时出现lxml UnicodeDecodeError

2024-10-01 22:25:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一些Python代码,它使用lxml HTML解析器来解析一个同事从随机抽取的网站样本中获取的HTML。在

在其中的两个例子中,我得到了一个形式上的错误

"'utf8' codec can't decode byte 0xe20x80 in position 502: unexpected end of data",

而且HTML内容确实包含一个损坏的UTF-8字符。在

代码中名为ele的变量被分配给包含错误字符的文本的<;p>;元素,可以通过电子文本. 也可以,但仅仅是分配电子文本到另一个变量会引发UnicodeDecodeError。except子句中可用的UnicodeDecodeError类型的对象包含一些有用的属性,例如文本中坏字节的开始位置和结束位置,这些属性可以用来创建一个新的字符串,从中删除坏字节,但是可以做任何事情来电子文本,比如取它的一个子串,引发一个新的UnicodeDetectError。我能做些什么来挽救ele.text的好部分吗?在

我是凭记忆写的,我不记得代码的所有细节,所以如果有用的话,我明天可以提供更多的信息。我记得的是ele是一个类似lxml._Element类型的对象,被解析的文件实际上在utf-8中,文件中有一个地方,其中匹配实体的字符的前两个utf-8字节后跟实体&rdquo;。所以文本包含"xE2x80&amp;rdquo;"。错误消息抱怨"xE2x80",并给出它们在一个包含520个字符的字符串中的位置。如果需要,我可以丢弃整个字符串,但是我宁愿使用位置信息来丢弃"xE2x80"。因为某种原因,做任何事电子文本在lxml中导致低级Cython代码出错。我明天上班时可以提供堆栈跟踪。什么,如果我能用那条短信做点什么?谢谢。在


Tags: 对象字符串代码文本类型字节属性html
1条回答
网友
1楼 · 发布于 2024-10-01 22:25:49

e2 80字节本身不会导致错误:

from lxml import html

html_data = b"<p>before &ldquo;\xe2\x80&rdquo; after"
p = html.fromstring(html_data)
print(repr(p.text))
# -> u'before \u201c\xe2\x80\u201d after'

正如@Esailija在评论中指出的,上面的数据并不解释为utf-8。要强制utf-8编码:

^{pr2}$
  • 检查utf-8是否是文档的正确字符编码
  • 在将中断的字节序列传递给lxml之前替换它

相关问题 更多 >

    热门问题