W przypadku wielu interfejsów API (większość, które widziałem) ratelimiting jest funkcją klucza API lub poświadczeń OAuth. (Google, Twitter, NOAA, Yahoo, Facebook itp.) Dobrą wiadomością jest to, że nie musisz fałszować adresu IP, wystarczy wymienić dane uwierzytelniające, gdy osiągną limit prędkości.
Trochę bezwstydna autopromocja tutaj, ale napisałem pakiet python specjalnie do obsługi tego problemu.
https://github.com/rawkintrevo/angemilner
https://pypi.python.org/pypi/angemilner/0.2.0
Wymaga demona mongodb i zasadniczo tworzysz stronę dla każdego ze swoich kluczy. Masz więc 4 adresy e-mail, każdy z osobnym kluczem. Po załadowaniu klucza określ maksymalną liczbę połączeń dziennie i minimalny czas między kolejnymi uruchomieniami.
Załaduj klucze:
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)
Następnie po uruchomieniu skrobaczki, na przykład interfejsu API NOAA:
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'})
staje się:
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']})
więc jeśli masz 5 kluczy, l.check_out_api_key
zwraca klucz, który ma najmniejsze użycie i czeka, aż upłynie wystarczająco dużo czasu na jego ponowne użycie.
Na koniec, aby zobaczyć, jak często Twoje klucze były używane / pozostały dostępny dostęp:
pprint(l.summary())
Nie napisałem tego dla R, ponieważ większość skrobania odbywa się w Pythonie (większość MOJE skrobanie). Można go łatwo przenieść.
W ten sposób można technicznie obejść ograniczenia stawek. Etycznie ...
UPDATE Przykład korzysta z Google Places API tutaj