Python HTTP 错误 429(请求过多)

标签 python pandas csv http-status-code-429

我曾经从 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 吗?

最佳答案

该错误是由您向其发出请求的 Web 服务器抛出的,几乎可以肯定是因为您发出请求的速度太快而他们不喜欢这样。这不是因为您的代码中有错误。

您尝试修复它没有多大意义 - StringIO 允许您使用内存中的字符串,就好像它是文件对象一样。将其作为参数传递给 requests.get 并不是真正有效的用例 - 您应该像以前一样使用 requests.get(grab_csv, ... ,因为 .get() 期望 url 参数是一个字符串。

我会查阅您使用的 API 的文档(如果有),并降低您的请求速率以符合其限制。

有一个简洁的 Python 包(恰本地命名为 ratelimit),可让您装饰函数以强制执行速率限制:https://pypi.org/project/ratelimit/

关于Python HTTP 错误 429(请求过多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64667251/

相关文章:

javascript - 在 python-vtk/three.js 中居中多数据模型的轴/枢轴

python - 名称错误 : name 'attrgetter' is not defined

python - Pandas - 根据多种条件更新列 - 按方法分组

python - 如何绘制单个数据点?

python - 如何删除 Pandas 中不需要的 `.0` s?

python - 在 python 中读取 csv 文件并将每个行项目作为脚本中的值进行迭代?

python - 我可以告诉 lldb 使用 PATH 中第一个以外的 Python 吗?

来自包含字典的字典的 Python Pandas 数据框

arrays - 使用 Azure 逻辑应用将 CSV 元素转换为单个数组

javascript - 如何使用 Javascript D3 将单列 CSV 文件导入到饼图中?