倫理的かつ費用対効果の高いデータスクラップのスケーリング


13

構造化されたデータと構造化されていないデータをインターネットからスクレイピングし、それを自分のモデルで利用するような喜びを私に与えるものはほとんどありません。

たとえば、Data Science Toolkit(またはRDSTKRプログラマー)を使用すると、IPまたはアドレスを使用して多くの適切なロケーションベースのデータを取得でき、tm.webmining.pluginfor Rのtmパッケージにより、財務データとニュースデータを簡単にスクレイピングできます。このような(半)構造化データを超える場合は、を使用する傾向がありますXPath

ただし、許可されるクエリの数の制限により、私は常に抑制されています。Googleは24時間あたり約50,000件のリクエストに制限していると思いますが、これはビッグデータにとって問題です。

技術的な観点からは、これらの制限を簡単に回避できます。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つの電子メールアドレスがあり、それぞれに個別のキーが割り当てられています。キーをロードするときに、1日あたりの最大コール数と使用間隔の最小値を指定します。

ロードキー:

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())

ほとんどのスクレイピングはpythonで行われるため(私のスクレイピングのほとんど)、Rについてはこれを書きませんでした。簡単に移植できます。

これがレート制限を技術的に回避する方法です。 倫理的に ...

更新この例では、ここで Google Places APIを使用しています


0

IPアドレスブロックを回避する素晴らしい方法は、Amazon AWS(またはAzureまたは他の同様のオンデマンドサービス)であることがわかりました。AWSのt2.nanoインスタンスは、高品質のプロキシとほぼ同じコストで、レート制限されたリクエストを十分に処理できます。

たとえば、100,000ページをスクレイピングする必要があるとします。AWS CLIを使用して、プログラムは1,000インスタンスを自動的に開始できます。リクエスト間で2秒待つ必要がある場合でも、200秒で完了します。そして、あなたはそれに対していくら払っていますか?

現在、t2.nanoインスタンスの価格は、AWSのオハイオ州で1時間あたり0.0058 ドルです。1000件のインスタンスの場合、1時間あたりわずか5.8 ドルです。ただし、1時間は必要ありません。100,000ページのジョブは200秒未満で終了しました。スクリプトのセットアップ、必要なパッケージのインストール、結果の圧縮、サーバー/ PCへのダウンロードに余分な時間を追加しますが、インスタンスごとに最大で10分のサーバー時間を使用しました。

または約1ドル。1ドルで200秒で100,000ページ。悪くない。

注:このようにスケーリングする場合、スクレイピングターゲットを誤って過負荷にしないように非常に注意する必要があります。1つのWebサイトでこれだけの火力を発揮すると、1秒ごとに約1,000件のリクエストがサーバーにヒットします。ほとんどのウェブサーバーを殺すのに十分。したがって、サイトの多様なリストがある場合、1,000サーバーのオプションは良いアイデアかもしれませんが、1つのサイトにアクセスする場合は、おそらく最大で10〜20サーバーを使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.