对于许多API(我见过最多),速率限制是您的API密钥或OAuth凭据的功能。(Google,Twitter,NOAA,Yahoo,Facebook等)。好消息是您不需要欺骗IP,只需要交换凭据即可,因为它们达到了速率限制。
这里有点自我羞辱的自我提升,但我专门编写了一个python软件包来处理此问题。
https://github.com/rawkintrevo/angemilner
https://pypi.python.org/pypi/angemilner/0.2.0
它需要一个mongodb守护程序,基本上,您需要为每个键创建一个页面。因此,您有4个电子邮件地址,每个电子邮件地址均分配有单独的密钥。装入密钥时,请指定每天的最大通话次数和两次使用之间的最短时间。
加载键:
from angemilner import APIKeyLibrarian
l= APIKeyLibrarian()
l.new_api_key("your_assigned_key1", 'noaa', 1000, .2)
l.new_api_key("your_assigned_key2", 'noaa', 1000, .2)
然后,当您运行刮板(例如NOAA api)时:
url= 'http://www.ncdc.noaa.gov/cdo-web/api/v2/stations'
payload= { 'limit': 1000,
'datasetid': 'GHCND',
'startdate': '1999-01-01' }
r = requests.get(url, params=payload, headers= {'token': 'your_assigned_key'})
变成:
url= 'http://www.ncdc.noaa.gov/cdo-web/api/v2/stations'
payload= { 'limit': 1000,
'datasetid': 'GHCND',
'startdate': '1999-01-01' }
r = requests.get(url, params=payload, headers= {'token': l.check_out_api_key('noaa')['key']})
因此,如果您有5个键,则l.check_out_api_key
返回使用最少的键,并等待,直到经过足够的时间才能再次使用。
最后,查看密钥的使用频率/可用的剩余使用时间:
pprint(l.summary())
我没有为R写这个,因为大多数抓取是在python中完成的(大部分是我的抓取)。它可以很容易地移植。
那就是您如何从技术上绕开速率限制。 道德上 ...
更新示例在此处使用Google Places API