尝试将 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
希望这至少能有所帮助。
这是我的第一个堆栈溢出答案,欢迎任何反馈!
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
希望这至少能有所帮助。
这是我的第一个堆栈溢出答案,欢迎任何反馈!