尝试将 URL 从 for 循环传递到 API 查询时出现异常错误

Exception error when trying to pass down URL from a for loop into a API query

import requests   
import json 

api_url = "https://api.taxes.info.net/taxes/%s/rate?page=1"

list =[
{"state": "Ohio", 
"state": "California",
"state": "Georgia"}
      ]  

for i in list:
   state_name = i.get("state")
   urls = api_url % state_name
print(urls) returns: >>>>> https://api.taxes.info.net/taxes/Ohio/rate?page=1 https://api.taxes.info.net/taxes/California/rate?page=1 https://api.taxes.info.net/taxes/Georgia/rate?page=1
  
    for url in urls:
        response = requests.get(url, headers={"Accept": "state.api+jsonv3", "Authorization": "password1234")



 Getting error message: >>>>> requests.exceptions.MissingSchema: Invalid URL 'h': No schema supplied. Perhaps you meant http://h?
       
                                                 

我正在尝试传递存储在我的第一个 for 循环中的 url,并将其传递给我的 API 请求。我对编程还很陌生,所以任何建议或指示都将不胜感激。我确实确认我的第二个 for 循环中的缩进是正确的。

在您的第一个循环中,您创建了一个变量 urls,它是一个字符串并且应该表示 url。 之后,您将在第一个循环中执行另一个循环,在这个循环中,您将遍历此 urls 变量中的每个字母。 您收到的错误消息是因为您尝试向 'h' 发出请求。 您的代码应如下所示:

import requests
import json

api_url = "https://api.taxes.info.net/taxes/%s/rate?page=1"

list = [
    {"state": "Ohio",
     "state": "California",
     "state": "Georgia"}
]
urls = []
for i in list:
    state_name = i.get("state")
    urls.append(api_url % state_name)
print(urls)

for url in urls:
    response = requests.get(url, headers={"Accept": "state.api+jsonv3", "Authorization": "password1234"})

按顺序来吧

您已经创建了一个字典列表。 尽管在您的情况下,您需要创建一个数组并在其中列出必要的元素。

list =[
{"state": "Ohio", 
"state": "California",
"state": "Georgia"}
      ]  

进一步在循环中,您创建了 urls 变量,它似乎是正确的,但您重新定义了它。这意味着如果你有 100 个元素,那么变量仍然是最后一个。

for i in list:
   state_name = i.get("state")
   urls = api_url % state_name

并且由于您的 url 是一个字符串,然后循环遍历它,python 将迭代每个字符,这正是请求所抱怨的。

下面我附上了应该可以正常工作的代码 导入请求 导入 json

api_url = "https://api.taxes.info.net/taxes/%s/rate?page=1"

states = ["Ohio", "California", "Georgia"]
request_urls = []

for state in states:
    state_name = state
    request_urls.append(api_url % state_name)

for url in request_urls:
    response = requests.get(url, headers={"Accept": "state.api+jsonv3", "Authorization": "password1234"})

TL;DR 您收到此错误的原因是因为 urls 是字符串而不是列表(我建议将其重命名为 url).这意味着第二个 for 循环是不必要的!

如果您想要更深入的回复:

如果您将变量 urls 设置为一个字符串(比方说 https://api.taxes.info.net/taxes/Georgia/rate?page=1),则无需遍历它。事实上,您可以像这样将该字符串传递给 requests.get

for i in list:
   state_name = i.get("state")
   urls = api_url % state_name

   # This works fine.
   response = requests.get(urls, headers={"Accept": "state.api+jsonv3", "Authorization": "password1234"})
现在您可能想知道为什么会出现错误 Invalid URL 'h': No schema supplied.

这是因为在 python 中,您 可以 实际上遍历字符串(这就是您正在做的事情)。

for l in "https://google.com":
    print(l)

这将按顺序打印 https://google.com 中的每个字母。因此,当您将 URL 的第一个字母传递给请求模块时,它会感到困惑,因为 h 不是 URL(https://api.taxes.info.net/taxes/Georgia/rate?page=1 的第一个字母)

总结

与其遍历字符串,不如将该字符串直接传递给 requests.get

希望这至少能有所帮助。

这是我的第一个堆栈溢出答案,欢迎任何反馈!