Python HTTP错误429(请求过多)

时间:2020-11-03 17:00:43

标签: 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>?

有什么主意我可以通过熊猫和请求解决HTTP错误429吗?

1 个答案:

答案 0 :(得分:0)

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

您尝试修复它没有多大意义-List<Map<String, Object>> data = getData(); Map<String, List<Object>> result = new HashMap<>(); for (Map<String, Object> element: data) { element.forEach((key, val) -> { if (result.containsKey(key)) result.get(key).add(val); else result.put(key, Arrays.asList(val)); }); } 允许您像使用文件对象一样使用内存中的字符串。将其作为参数传递给StringIO并不是真正的用例-您应该像以前一样使用requests.get,因为requests.get(grab_csv, ...期望.get()参数能够是一个字符串。

我将咨询您使用的API文档(如果有的话),并放慢您的请求速度以使其符合限制。

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

相关问题