我使用程序查询Google地理编码API,并搜索城市名称的坐标。我使用 time.sleep(1)来确保每秒不超过请求限制。我也非常确定我没有超出每日限制请求,并且我已在帐户中启用结算。
代码工作了一段时间,但现在当我运行它时,代码会返回如下错误:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我转到浏览器中的API链接,它要求我输入标识字符,说“我们的系统检测到来自您的计算机网络的异常流量。此页面检查是否确实是您发送请求,以及不是机器人。“。
我不认为我的代码是恶意的,我想知道我的代码做错了什么。
这是我的代码:
import urllib.parse
import requests
import pandas as pd
import time
main_api = 'https://maps.googleapis.com/maps/api/geocode/json?'
api_key = '&key = **********'
state = "washington,"
country = "US"
file = r'C:\Users\rin\xy.xlsx'
xl_workbook = pd.ExcelFile(file)
df = xl_workbook.parse("xy")
components = 'components=country:US|state:washington'
city_name = df['city_name'].tolist()
for x in post_office:
address = x
print(">>>>>" + x + "<<<<<")
url = main_api + urllib.parse.urlencode({'address': address}) + state + country + api_key + components
print(url)
json_data = requests.get(url).json()
json_status = json_data['status']
print('API status: ' + json_status + '\n')
city = json_data['results'][0]['address_components'][0]['long_name']
state = json_data['results'][0]['address_components'][2]['long_name']
if x == city and state == "Washington":
print("MATCH:OK" + '\n')
if x == city and state == "Oregon":
print("ooooooooooo")
elif x != city_name:
print("WN")
if json_status == "OK":
formatted_address = json_data['results'][0]["formatted_address"]
print()
print(formatted_address)
LATITUDE = json_data['results'][0]["geometry"]["location"]["lat"]
LONGITUDE = json_data['results'][0]["geometry"]["location"]["lng"]
print(LATITUDE)
print(LONGITUDE)
print(">>>>>>>END<<<<<<")
print('\n')
time.sleep(1)
答案 0 :(得分:0)
似乎你总是期待成功的反应。
而不是
LONGITUDE = json_data['results'][0]["geometry"]["location"]["lng"]
你可以使用
LONGITUDE = json_data['results'][0]["geometry"]["location"].get("lng", None)
使用最后一个,当你读dict(JSON)时,你永远不会得到异常,即使dict没有你期望的密钥。
答案 1 :(得分:0)
您收到的json似乎与解串器标准不匹配。 你能粘贴你收到的请求的内容吗?