我有一个大约 250000 个 url 的列表,我需要从 API 获取数据。
我使用 grequests 库创建了一个类来进行异步调用。但是 API 限制是每秒 100 次调用,grequest 超过了这个限制。
使用 grequest 的代码:
import grequests
lst = ['url.com','url2.com']
class Test:
def __init__(self):
self.urls = lst
def exception(self, request, exception):
print ("Problem: {}: {}".format(request.url, exception))
def async(self):
return grequests.map((grequests.get(u) for u in self.urls), exception_handler=self.exception, size=100000)
def collate_responses(self, results):
return [x.text for x in results]
test = Test()
#here we collect the results returned by the async function
results = test.async()
无论如何我可以使用请求库每秒拨打 100 次电话吗?
我尝试了请求,但在大约 100000 次调用后超时。
在这种情况下,我将一个 ID 传递到 URL 中。
import requests
L = [1,2,3]
for i in L:
#print (row)
url = 'url.com/Id={}'.format(i)
xml_data1 = requests.get(url).text
lst.append(xml_data1)
time.sleep(1)
print(xml_data1)