我正在尝试编写地理编码脚本。有一个丹麦语(官方和免费)Web服务,我在URL中输入一个地址,并获得一个包含所有需要信息的json文件。
我无法找到正确的方法来翻译我的丹麦字符(æ,ø,å)进入网址时。 在示例中,我包含了两个不同的URL(包含地址信息)。 一个 - 街道'Byvej'的工作正常,我得到的结果我期望在IDLE打印出来。 (我也可以得到lat / long)。
另一条街道是'Bispegårdsvej',在IDLE中没有任何东西。返回的列表为空。 网址在浏览器中工作正常,我知道,我需要在脚本中添加一些东西,我找不到任何有用的东西。
我正在使用ActivePython 2.7.2.5 谢谢, 托米
# -*- coding: cp1252 -*-
import urllib2
import json
#url='http://geo.oiorest.dk/adresser.json?postnr=4682&vejnavn=Byvej&husnr=31'
url='http://geo.oiorest.dk/adresser.json?postnr=4320&vejnavn=Bispegårdsvej&husnr=2'
try:
data = urllib2.urlopen(url).read()
adresser = json.loads(data)
for adresse in adresser:
print "%s %s, %s %s" % \
(adresse['vejnavn']['navn'],
adresse['husnr'],
adresse['postnummer']['nr'],
adresse['postnummer']['navn'])
except urllib2.HTTPError, e:
print "HTTP error: %d" % e.code
except urllib2.URLError, e:
print "Network error: %s" % e.reason.args[1]
答案 0 :(得分:0)
您需要使用百分比编码对社交角色进行编码,也称为URL编码。在编码百分比之后,URL应如下所示:
http://geo.oiorest.dk/adresser.json?postnr=4320&vejnavn=Bispeg%C3%A5rdsvej&husnr=2
符合RFC 3987中定义的IRI到URI映射的Web服务在字符规范化后将使用utf-8进行编码,但您应该检查服务文档以确定要使用的编码。
Python在标准库中有urllib.quote(),用于从字符串中执行百分比编码,在标准库中执行urllib.urlencode(),从字典或两个元素元组的迭代中进行百分比编码,以生成字符串for查询参数。
答案 1 :(得分:0)
您必须正确编码特殊字符,例如urlencode确实:
In[16]: urllib.urlencode([('postnr',4320),('vejnavn', 'Bispegårdsvej'), ('husnr',2)])
Out[16]: 'postnr=4320&vejnavn=Bispeg%C3%A5rdsvej&husnr=2'
如果您将基本网址添加到此字符串中,这应该可行(我至少在浏览器中尝试过)。
如果你开放获得第三方套餐,requests将是一个受欢迎的选择。 它会简化事情:
import requests
response = requests.get('http://geo.oiorest.dk/adresser.json',
params = dict(postnr=4320,
vejnavn='Bispegårdsvej',
husnr=2))