Этическое и экономичное масштабирование данных

13

Немногие вещи в жизни доставляют мне удовольствие, например, извлечение структурированных и неструктурированных данных из Интернета и использование их в моих моделях.

Например, Data Science Toolkit (или RDSTKдля программистов на R) позволяет мне получать много хороших данных, основанных на местоположении, с использованием IP-адресов или адресов, а пакет tm.webmining.pluginfor R tmупрощает очистку финансовых и новостных данных. Выходя за рамки таких (полу) структурированных данных, я склонен использовать XPath.

Однако меня постоянно душат ограничения на количество запросов, которые вам разрешено делать. Я думаю, что Google ограничивает меня до 50 000 запросов в сутки, что является проблемой для больших данных.

С технической точки зрения обойти эти ограничения легко - просто переключите IP-адреса и удалите другие идентификаторы из вашей среды. Однако это представляет как этические, так и финансовые проблемы (я думаю?).

Есть ли решение, которое я пропускаю?

Hack-R,
источник

Ответы:

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)

Затем, когда вы запускаете свой скребок, например, 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'})

будет выглядеть так:

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 здесь

rawkintrevo
источник
0

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

Например, скажем, вам нужно очистить 100 000 страниц. С помощью интерфейса командной строки AWS ваша программа может автоматически запускать 1000 экземпляров. Даже если вам нужно подождать 2 секунды между запросами, вы все равно закончите через 200 секунд. И сколько ты за это платишь?

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

Или около одного доллара. 100 000 страниц за 200 секунд за один доллар. Неплохо.

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

Ааюш Агравал
источник