Етичний та економічно вигідний масштабування даних із записом масштабування


13

Небагато речей у житті мені приносять задоволення, як скребкування структурованих та неструктурованих даних з Інтернету та використання їх у своїх моделях.

Наприклад, Інструментарій даних щодо наукових даних (або RDSTKдля програмістів R) дозволяє мені отримувати багато хороших даних, заснованих на розташуванні, використовуючи IP-адреси або адреси, а пакет tm.webmining.pluginR для tmпрямого скрабування фінансових та новинних даних. Якщо виходити за рамки таких (напів) структурованих даних, я схильний використовувати XPath.

Однак мене постійно обмежують обмеження кількості запитів, які ви можете робити. Я думаю, що Google обмежує мене приблизно на 50000 запитів за 24 години, що є проблемою для Big Data.

З технічної точки зору подолати ці межі просто - просто переключіть IP-адреси та очистіть інші ідентифікатори з вашого оточення. Однак це стосується як етичних, так і фінансових питань (я думаю?).

Чи є рішення, яке я не помічаю?

Відповіді:


6

Для багатьох 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)

Потім, коли ви запускаєте скребок, наприклад, NOIA 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 (більшість моїх скребків). Його можна було легко перенести.

Ось як можна технічно обійти обмеження ставок. Етично ...

UPDATE У цьому прикладі використовується Google Places API тут


0

Я знайшов фантастичний спосіб обійти блоки IP-адрес Amazon AWS (або Azure або будь-який інший подібний сервіс на вимогу). Екземпляр t2.nano від AWS коштує майже так само, як проксі-сервер високої якості, і більш ніж здатний просто обробляти запити з обмеженою швидкістю.

Наприклад, скажімо, що вам потрібно скребки 100 000 сторінок. Використовуючи AWS CLI, ваша програма може автоматично запускати 1000 екземплярів. Навіть якщо вам потрібно зачекати 2 секунди між запитами, ви все одно зробите це за 200 секунд. А скільки ви платите за це?

Наразі ціна на примірник t2.nano становить 0,0058 доларів за годину в Огайоському регіоні AWS. За тисячу примірників, що тільки $ 5,8 в годину. Але вам не потрібна ціла година. Ваше завдання на 100 000 сторінок було закінчено менше ніж за 200 секунд. Додайте трохи додаткового часу для налаштування сценарію, встановлення необхідних пакетів, застебнення результатів та завантаження їх на ваш сервер / ПК та ви все ще використовуєте не більше 10 хвилин часу на сервері за примірник.

Або про один долар. 100 000 сторінок за 200 секунд за один долар. Непогано.

Примітка. Під час подібного масштабування ви повинні бути дуже обережними, щоб випадково не перевантажувати ціль зіскрібка. Якщо ви розкриєте таку велику кількість вогневої сили на одному веб-сайті, це близько 1000 запитів, що потрапляють на сервер кожну чергу. Досить вбити більшість веб-серверів. Тож якщо варіант 1000 серверів може бути хорошою ідеєю, якщо у вас є різноманітний список сайтів, вам, мабуть, доведеться використовувати максимум 10-20 серверів, якщо ви потрапляєте на один сайт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.