0

次のURLを使用してGoogleWeatherAPIから情報を取得しようとすると、

http://www.google.com/ig/api?weather=Munich,Germany&hl=de

そして、それをミニドムで解析しようとすると、ドキュメントが適切に形成されていないというエラーが発生します。

次のコードを使用します

sock = urllib.urlopen(url) # above mentioned url
doc = minidom.parse(sock)

応答のドイツ語の文字がエラーの原因だと思います。

これを行う正しい方法は何ですか?

4

2 に答える 2

2

これはうまくいくようです:

sock = urllib.urlopen(url)
# There is a nicer way for this, but I don't remember right now:
encoding = sock.headers['Content-type'].split('charset=')[1]
data = sock.read()
dom = minidom.parseString(data.decode(encoding).encode('ascii', 'xmlcharrefreplace'))

minidomはASCII以外のものを処理しないと思います。代わりにlxmlを調べたいと思うかもしれません。

于 2009-09-10T22:10:03.073 に答える
1

ヘッダーで送信されるエンコーディングは、pythonのurllib.urlopenによるとiso-8859-1です(ただし、この場合、firefoxのライブhttpヘッダーは私と一致しないようです-utf-8を報告します)。xml自体にはエンコーディングが指定されていません->そのため、xml.dom.minidomはそれがutf-8であると想定しています。

したがって、以下でこの特定の問題を修正する必要があります。

import urllib
from xml.dom import minidom

sock = urllib.urlopen('http://www.google.com/ig/api?weather=Munich,Germany&hl=de')
s = sock.read()
encoding = sock.headers['Content-type'].split('charset=')[1] # iso-8859-1
doc = minidom.parseString(s.decode(encoding).encode('utf-8'))

編集:Glenn Maynardのコメントの後で、この回答を更新しました。私はLennertRegebroの答えから1行を自由に取り出しました。

于 2009-09-10T22:25:45.237 に答える