对于许多 API(我见过的大多数),速率限制是您的 API 密钥或 OAuth 凭据的功能。(Google、Twitter、NOAA、Yahoo、Facebook 等)好消息是您不需要欺骗您的 IP,您只需要在它们达到速率限制时更换凭证。
这里有点无耻的自我宣传,但我写了一个专门用于处理这个问题的python包。
https://github.com/rawkintrevo/angelmilner
https://pypi.python.org/pypi/angelmilner/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