Python HTTP 错误 429(请求过多)
Python HTTP error 429 (Too Many Requests)
我曾经从 URL 中获取 CSV 文件,然后将该 CSV 文件直接放入 Pandas 数据框,如下所示:
import pandas as pd
grab_csv = 'https://XXXX.XX/data.csv'
pd_data = pd.read_csv(grab_csv).drop(columns=['Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 4', 'Column 5', 'Column 6', 'Column 7'])
从今天开始,我得到了urllib.error.HTTPError: HTTP Error 429: Too Many Requests
。我为修复它所做的尝试:
import pandas as pd
import requests
from io import StringIO
grab_csv = 'https://XXXX.XX/data.csv'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
res_grab_data = requests.get(StringIO(grab_csv), headers=headers).text
pd_data = pd.read_csv(res_grab_data).drop(columns=['Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 4', 'Column 5', 'Column 6', 'Column 7'])
这一次,我收到错误 requests.exceptions.MissingSchema: Invalid URL '<_io.StringIO object at 0x0000012B7C622A20>': No schema supplied. Perhaps you meant http://<_io.StringIO object at 0x0000012B7C622A20>?
。
知道如何使用 pandas 和请求解决 HTTP 错误 429 吗?
错误是由您向其发出请求的网络服务器抛出的,几乎可以肯定是因为您发出请求的速度太快而他们不喜欢。这不是因为你的代码有错误。
您修复它的尝试没有多大意义 -- StringIO
允许您像使用文件对象一样使用 in-memory 字符串。将它作为参数传递给 requests.get
并不是真正有效的用例——您应该像以前一样使用 requests.get(grab_csv, ...
,因为 .get()
期望 url
参数是一个字符串。
我会查阅您使用的 API 文档(如果有的话),并降低您的请求速度以符合它们的限制。
有一个整洁的 Python 程序包(恰如其分地命名为 ratelimit
),可让您修饰函数以实施速率限制:https://pypi.org/project/ratelimit/
我曾经从 URL 中获取 CSV 文件,然后将该 CSV 文件直接放入 Pandas 数据框,如下所示:
import pandas as pd
grab_csv = 'https://XXXX.XX/data.csv'
pd_data = pd.read_csv(grab_csv).drop(columns=['Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 4', 'Column 5', 'Column 6', 'Column 7'])
从今天开始,我得到了urllib.error.HTTPError: HTTP Error 429: Too Many Requests
。我为修复它所做的尝试:
import pandas as pd
import requests
from io import StringIO
grab_csv = 'https://XXXX.XX/data.csv'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
res_grab_data = requests.get(StringIO(grab_csv), headers=headers).text
pd_data = pd.read_csv(res_grab_data).drop(columns=['Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 4', 'Column 5', 'Column 6', 'Column 7'])
这一次,我收到错误 requests.exceptions.MissingSchema: Invalid URL '<_io.StringIO object at 0x0000012B7C622A20>': No schema supplied. Perhaps you meant http://<_io.StringIO object at 0x0000012B7C622A20>?
。
知道如何使用 pandas 和请求解决 HTTP 错误 429 吗?
错误是由您向其发出请求的网络服务器抛出的,几乎可以肯定是因为您发出请求的速度太快而他们不喜欢。这不是因为你的代码有错误。
您修复它的尝试没有多大意义 -- StringIO
允许您像使用文件对象一样使用 in-memory 字符串。将它作为参数传递给 requests.get
并不是真正有效的用例——您应该像以前一样使用 requests.get(grab_csv, ...
,因为 .get()
期望 url
参数是一个字符串。
我会查阅您使用的 API 文档(如果有的话),并降低您的请求速度以符合它们的限制。
有一个整洁的 Python 程序包(恰如其分地命名为 ratelimit
),可让您修饰函数以实施速率限制:https://pypi.org/project/ratelimit/