- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经为此奋斗了一个小时。我正在用 iterparse
解析 XML 字符串.但是,数据没有正确编码,我不是它的提供者,所以我无法修复编码。
这是我得到的错误:
lxml.etree.XMLSyntaxError: line 8167: Input is not proper UTF-8, indicate encoding !
Bytes: 0xEA 0x76 0x65 0x73
我怎样才能简单地忽略这个错误并继续解析?我不介意,如果一个字符没有正确保存,我只需要数据。
以下是我尝试过的,全部来自互联网:
data = data.encode('UTF-8','ignore')
data = unicode(data,errors='ignore')
data = unicode(data.strip(codecs.BOM_UTF8), 'utf-8', errors='ignore')
编辑:
我无法显示 url,因为它是私有(private) API 并且涉及我的 API key ,但这是我获取数据的方式:
ur = urlopen(url)
data = ur.read()
导致问题的字符是:å
, 我猜 ä
& ö
等,也会破坏它。
这是我尝试解析它的部分:
def fast_iter(context, func):
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
print elem.xpath('title/text( )')
context = etree.iterparse(StringIO(data), tag='item')
fast_iter(context, process_element)
编辑 2:
This当我尝试用 PHP 解析它时会发生什么。澄清一下,F***ing Åmål 是一个 drama movie =D
文件以<?xml version="1.0" encoding="UTF-8" ?>
开头
这是我从 print repr(data[offset-10:offset+60])
得到的:
ence des r\xeaves, La</title>\n\t\t<year>2006</year>\n\t\t<imdb>0354899</imdb>\n
最佳答案
你说:
The character that causes the problem is: å,
你怎么知道的?你用什么看你的文字?
因此您无法发布 URL 和您的 API key ;如何读取数据,将其写入文件(以二进制模式),然后发布?
当您在网络浏览器中打开该文件时,它会检测到什么编码?
至少,做到这一点
data.decode('utf8') # where data is what you get from ur.read()
这将产生一个异常,告诉您非 UTF-8 内容的字节偏移量。
然后这样做:
print repr(data[offset-10:offset+60])
并向我们展示结果。
假设编码实际上是cp1252
并解码 lxml 错误消息中的字节:
>>> guff = "\xEA\x76\x65\x73"
>>> from unicodedata import name
>>> [name(c) for c in guff.decode('1252')]
['LATIN SMALL LETTER E WITH CIRCUMFLEX', 'LATIN SMALL LETTER V', 'LATIN SMALL LE
TTER E', 'LATIN SMALL LETTER S']
>>>
那么您是否看到电子抑扬音后跟 ves
, 或 a 环后接 ves
, 或者 a-ring 后跟其他东西?
数据是否以类似 <?xml version="1.0" encoding="UTF-8"?>
的 XML 声明开头?如果不是,它以什么开头?
编码猜测/确认的线索:文本是用什么语言写的?哪个国家?
更新基于提供的进一步信息。
根据您在错误附近显示的片段,电影名称是“La science des rêves”(梦的科学)。
有趣的是,PHP 会因“F***ing Åmål”而作呕,而 Python 会因法国梦而窒息。您确定您进行了相同的查询吗?
您应该提前告诉我们这是 IMDB,您会更快得到答案。
解决方案 在您通过 data
之前到 lxml
解析器,这样做:
data = data.replace('encoding="UTF-8"', 'encoding="iso-8859-1"')
这是基于他们在其网站上声明的编码,但这也可能是谎言。在这种情况下,请尝试 cp1252
反而。它绝对不是 iso-8859-2。
关于python - 忽略 Python 中的编码错误(iterparse)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243005/
我使用 iterparse 来解析一个大的 xml 文件 (1,8 GB)。我将所有数据写入 csv 文件。t 我制作的脚本运行良好,但由于某种原因它会随机跳行。这是我的脚本: import xml.
我正在使用 lxml iterparse 来读取巨大的 xml 文件。对于给定的 mainElement,我检查子元素并处理每个子元素。但我注意到,在检查元素中的子节点时,解析器有时实际上会丢失一些子
我想检索 XML 文件中特定元素的内容。然而,在 XML 元素中,还有其他 XML 元素,它们破坏了父标记中内容的正确提取。一个例子: xml = '''2. A protective uniform
我使用 Python 的 iterparse解析 nessus 扫描的 XML 结果(.nessus 文件)。对意外记录的解析失败,但相似的记录已被正确解析。 XML 文件的一般结构是很多记录,如下所
在回答另一个问题时,有人向我展示了以下教程,其中作者声称使用 iterparse 在 3 秒内解析了一个 ~100 MB 的 XML 文件: http://eli.thegreenplace.net/
有没有办法从lxml的lxml.etree.iterparse中得到多个标签名?我有一个类似文件的对象,它具有昂贵的读取操作和许多标签,因此获取所有标签或执行两次传递并不是最佳选择。 编辑:类似于 B
我正在尝试解析 xml。第一个 iterparse 工作正常,但第二个开始填充内存。如果删除第一个 iterparse,则什么都不会改变。Xml 有效。 def clear_element(e):
我正在尝试解析一个非常大的 XML 文件,因此我决定使用 lxml.iterparse,如所解释的 here . 所以我的代码如下所示: import sys from lxml import etr
我已经为此奋斗了一个小时。我正在用 iterparse 解析 XML 字符串.但是,数据没有正确编码,我不是它的提供者,所以我无法修复编码。 这是我得到的错误: lxml.etree.XMLSynta
如何解析大型 XML 文件并将其元素处理为 ObjectifiedElement(使用 objectify 解析器)。 我没有找到比以下更好的解决方案: from lxml import etree,
我想从文件(1.5gb 文件)中动态解析 xml,如下所示: x y URL__I_WANT_TO_PULLOUT
我不明白为什么会这样: content = urllib2.urlopen(url) context = etree.iterparse(content, tag='{my_ns}my_first_t
我有一个很大的 XML 文件,其中包含如下条目 (实际上,有多个 data 条目,它们在 XML 树中更深,但让我们保持简单。) 我想用 Python 读取这个文件并将所有
我需要整理一段代码,将一个可能很大的 XML 文件解析为自定义 Python 对象。思路大致如下: from lxml import etree for e, tag in etree.iterpar
我正在解析一个 700mb 的文件,我有以下代码在我的测试文件上运行良好,没有行 context.iter(context) 和 event, elem = context.next()。 form
过滤器是 using iterparse 解析一个简单的 XML StringIO object在unit test .但是,当之后尝试访问 StringIO 对象时,Python 会退出并显示“Va
import os import xml.etree.ElementTree as et for ev, el in et.iterparse(os.sys.stdin): el.clear(
我正在使用 elementtree.ElementTree.iterparse 来解析大型 (371 MB) xml 文件。 我的代码基本上是这样的: outf = open('out.txt', '
由于没有人回答或评论这篇文章,我决定重写这篇文章。 考虑以下使用 lxml 的 Python 代码: treeIter = etree.iterparse(fObj) for event, ele i
我想遍历 xml 文件的元素并生成每个元素,除非父元素是一个特征。 所以在伪代码中 for event, element in cElementTree.iterparse('../test.
我是一名优秀的程序员,十分优秀!