我正在尝试使用以XML格式返回数据的requests.get从geocoder.ca API收集一些地理编码。
在大多数情况下,我已经能够根据需要进行编码并转义某些字符(&),以便当我尝试将此数据导入元素时(使用xml模块中的ElementTree)它不会'抱怨
但对于一个特定的纬度/经度集,返回的地址包含少于符号(<),这会在尝试解析xml字符串时生成“格式不正确(无效的令牌)”错误。
查找实际地址,街道名称包含ë字符,无论出于何种原因,该字符被翻译为'A<<<<在回复内容中:
<geodata>
<latt>45.644743</latt>
<longt>-76.033414</longt>
<city>La PAache</city>
<prov>QC</prov>
<postal>J0X2W0</postal>
<stnumber>11</stnumber>
<staddress>RaphaA<<l CH</staddress>
<inlatt>45.6464</inlatt>
<inlongt>-76.0352</inlongt>
<distance>0.082</distance><NearRoad>Raphael CH</NearRoad>
<NearRoadDistance>0.083</NearRoadDistance>
<TimeZone>America/Toronto</TimeZone> <AreaCode>819</AreaCode>
</geodata>
显然这是不正确的,我对任何其他重音角色没有任何问题,所以我不确定为什么这个特别是让我失望。
以下是我用于获取和解析从requests.get返回的XML数据的代码:
import requests
from xml.etree import ElementTree
url = "http://geocoder.ca"
xmlFile = open('xmlFile.xml', 'w')
latt = 45.6464
longt = -76.0352
params = {'latt': latt, 'longt' : longt, 'reverse': 1, 'geoit': 'XML'}
r = requests.get(url, params = params)
xmlFile.write(r.content)
tree = ElementTree.fromstring((r.content.replace('&', '&')))
我可以尝试找到逃脱这两个角色的方法,但我仍然会有一个不再有意义的地址(我不想要)
如果有人对此有任何见解,我们将不胜感激。