Bing REST HTTPError(req.full_url, code, msg, hdrs, fp)

Bing REST HTTPError(req.full_url, code, msg, hdrs, fp)

我需要获取很多地址的经纬度位置,大约100k+。但是,我的代码的工作方式,我认为 Bing 正在阻止我,因为他们认为我是垃圾邮件机器人或其他东西?我不确定错误的含义。有什么办法可以解决这个问题吗?

for i in listAddresses:
    url = "http://dev.virtualearth.net/REST/v1/Locations/US/" + i + "?o=xml&key=" + subscriptionKey

    # original code but I got the HTTPError
    # page = urllib.request.urlopen(url)
    # stringPage = page.read().decode('utf-8')

    # some code I found online. Still returns the same error
    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
    stringPage = urlopen(req).read().decode('utf-8')

    # really bad/ basic way of getting the latitude and longitude from the xml return
    lat = re.findall(r'<Latitude>(.*?)</Latitude>', stringPage)[0]
    long = re.findall(r'<Longitude>(.*?)</Longitude>', stringPage)[0]
    address = i.replace("%20", " ")  

    location.append(address)
    location.append(lat)
    location.append(long)  

File "C:\Users\...\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp) 

是Bing'blocking'你。它不一定认为您是 'spam bot' - 它只是 Bing Maps REST "Basic" 免费帐户的强加限制(但也用于防止垃圾邮件)API。

Bing 允许免费帐户每秒最多 5 个请求,每年总共有 125,000 个请求,付费产品每秒最多可以有 50 个请求,还有更多请求。您可以在此处查看更多信息:https://www.microsoft.com/en-us/maps/licensing/options

正如您在评论中提到的,它阻止了 "after 5 requests",这是有道理的。我假设您使用的是免费帐户,并且 Python 程序的速度 运行 足以每秒发出 >5 个请求。不幸的是,天下没有免费的午餐。您必须更换供应商或付费。

或者,导入 time 并在循环中添加一个 time.sleep(number_of_seconds)