2

以下を使用して URL を開いています。

response = urllib2.urlopen(url, data, timeout=_TIMEOUT)

を使用するresponse.read()と、次の出力が得られます。

<XMLlookup licenseid="X4X6X42" reason="OK" status="1" />

しかし、ElementTree を使用して解析したい場合は、次のようになります。

print response.read()
t = ET.parse(response)
r = t.getroot()
print r.attrib.get('status')

次のエラーメッセージが表示されます。

File "<string>", line 62, in parse
File "<string>", line 38, in parse
cElementTree.ParseError: no element found: line 1, column 0

しかし、行を削除するresponse.read()と、コードは正常に機能します。私は何を間違っていますか?

4

3 に答える 3

5

応答は (実際には addinfourl のような) ファイル オブジェクトであるため、一度しか読み取ることができません。read 常にテキスト全体を読んでいるため、後続の の呼び出しは空の文字列を返します。

readしたがって、を使用する前に呼び出さないかET.parse(response)、結果を文字列に格納して ET に使用します。

txt = response.read()
# do what you want with txt (without changing it)
t = ET.fromstring(txt)
于 2014-11-11T22:06:08.630 に答える
2

それ以外の

response.read()
t = ET.parse(response)
r = t.getroot()

試す

resp = response.read()
t = ET.fromstring(resp)
r = t.getroot()

また

t = ET.fromstring(response.read())
r = t.getroot()

また、すべての HTML が XML として解析できるわけではないことに注意してください。リクエストが XHTML を返す場合は問題ありませんが、それ以外の場合は、表示されているものと非常によく似たエラーが発生します。

于 2014-11-11T22:01:28.860 に答える