私はこれと1時間戦ってきました。XML文字列を。で解析していますiterparse
。ただし、データが適切にエンコードされておらず、私はそのプロバイダーではないため、エンコードを修正できません。
これが私が得るエラーです:
lxml.etree.XMLSyntaxError: line 8167: Input is not proper UTF-8, indicate encoding !
Bytes: 0xEA 0x76 0x65 0x73
このエラーを単に無視して、解析を続行するにはどうすればよいですか?1つの文字が適切に保存されていなくても、データが必要なだけです。
これが私が試したもので、すべてインターネットから選んだものです。
data = data.encode('UTF-8','ignore')
data = unicode(data,errors='ignore')
data = unicode(data.strip(codecs.BOM_UTF8), 'utf-8', errors='ignore')
編集:
URLはプライベートAPIであり、APIキーが含まれているため、表示できませんが、これがデータの取得方法です。
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:
これは、PHPで解析しようとするとどうなるかです。明確にするために、F***ingÅmålはドラマ映画=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