私はurllib.requestとunicodeで苦労しています。都市名のリストを取得し、そこからgeonames.org APIリクエストURLを作成し、出力XMLデータを解析して必要な方法で正確にジオネーム情報を表示するスクリプトがあります。このスクリプトは、都市名にKölnのöのような非ASCII文字(私はドイツの都市名を使用する必要があります)が含まれていない限り正常です。urllib.requestのUnicode/Umlauts XMLの構文解析
# -*- coding: utf-8 -*-
import urllib.request
from xml.etree import ElementTree as ET
urllist = []
citylist = ['Hamburg', 'Bremen']
for city in citylist:
requestURL = 'http://api.geonames.org/search?name=' + city + '&maxRows=1&lang=de&username=demo'
urllist.append(requestURL)
for url in urllist:
root = ET.parse(urllib.request.urlopen(url)).getroot()
items = root.findall('geoname')
for item in items:
print(item.find('name').text + ', ' + item.find('countryName').text + ' [' + item.find('lat').text + ',' + item.find('lng').text + '] [id:' + item.find('geonameId').text + ']')
私はKöln
とHamburg
を切り替えると、スクリプトはエラーメッセージUnicodeEncodeError: 'ascii' codec can't encode character '\xf6' in position 18: ordinal not in range(128)
で終了します。
もう1つ動作しないことは、都市名が空白の場合、Bad Godesberg
のようになります。私は間違った方法を使ってXMLをリクエストしていますか、URLを作成する前に市の名前をデコードする必要がありますか(Bad%20Godesberg
のように2単語都市の場合はほぼ間違いありません)?
ありがとうございました!あなたはurlencode
を使用する必要が
ありがとうございます、私はURLを調べるつもりですエンコード!その間、私はJuypterノートブックで自分のコードを実行しようとしましたが、私は説明できない変更は一切しませんが、今は完璧です。 – kbecker87