我正在使用一些 Python 代码,这些代码使用lxml HTML
解析器来解析同事从随机网站样本中抓取的 HTML。
在其中两个中,我收到表格错误
“'utf8' 编解码器无法解码位置 502 中的字节 0xe20x80:数据意外结束”,
并且 HTML 内容确实包含损坏的UTF-8
字符。
代码中的一个名为 ele 的变量被分配给包含错误字符的文本周围的 <p> 元素,并且可以通过 ele.text 访问该文本。或者它可能是,但仅将 ele.text 分配给另一个变量会导致UnicodeDecodeError
引发 。在 except 子句中可用的类型对象UnicodeDecodeError
包含一些有用的属性,例如文本中坏字节的开始和结束位置,可用于创建已删除坏字节的新字符串,但是这样做ele.text 的任何内容,例如获取它的子字符串,都会引发一个新UnicodeDetectError
的。我能做些什么来挽救好的部分ele.text
吗?
我是凭记忆写的,我不记得代码的所有细节,所以如果有用的话我明天可以提供更多信息。我记得的是 ele 是一个类型的对象,lxml._Element
被解析的文件确实在 中utf-8
,并且文件中有一个位置,其中字符的前两个utf-8
字节与实体匹配&rdquo; 紧随其后的是实体“。所以文本包含"xE2x80&rdquo;"
. 错误消息抱怨"xE2x80"
并给出了它们在一个包含大约 520 个字符的字符串中的位置。如有必要,我可以丢弃整个字符串,但我宁愿只使用位置信息来丢弃"xE2x80"
. 出于某种原因,使用 ele.text 执行任何操作都会导致 lxml 中较低级别的 Cython 代码出错。我明天上班时可以提供堆栈跟踪。什么,如果我能用那个文本做什么?谢谢。