Scaling Data Scaling yang Etis dan Hemat Biaya


13

Beberapa hal dalam hidup memberi saya kesenangan seperti menggores data terstruktur dan tidak terstruktur dari Internet dan memanfaatkannya dalam model saya.

Sebagai contoh, Data Science Toolkit (atau RDSTKuntuk programmer R) memungkinkan saya untuk menarik banyak data berbasis lokasi yang baik menggunakan IP atau alamat dan paket tm.webmining.pluginuntuk R tmmembuat goresan langsung data keuangan dan berita. Saat melampaui data terstruktur (semi-) seperti itu, saya cenderung menggunakan XPath.

Namun, saya terus-menerus dibatasi oleh jumlah pertanyaan yang diizinkan Anda buat. Saya pikir Google membatasi saya sekitar 50.000 permintaan per 24 jam, yang merupakan masalah bagi Big Data.

Dari perspektif teknis , mengatasi batasan-batasan ini mudah - cukup alihkan alamat IP dan bersihkan pengidentifikasi lainnya dari lingkungan Anda. Namun, ini menyajikan masalah etika dan keuangan (saya pikir?).

Apakah ada solusi yang saya abaikan?

Jawaban:


6

Untuk banyak API (yang paling sering saya lihat) ratelimiting adalah fungsi API Key atau kredensial OAuth Anda. (Google, Twitter, NOAA, Yahoo, Facebook, dll.) Kabar baiknya adalah Anda tidak perlu memalsukan IP Anda, Anda hanya perlu menukar kredensial ketika mereka mencapai batas tingkat di sana.

Sedikit promosi diri yang tidak tahu malu di sini tapi saya menulis paket python khusus untuk menangani masalah ini.

https://github.com/rawkintrevo/angemilner

https://pypi.python.org/pypi/angemilner/0.2.0

Ini membutuhkan daemon mongodb dan pada dasarnya Anda membuat halaman untuk masing-masing kunci Anda. Jadi, Anda memiliki 4 alamat email masing-masing dengan kunci terpisah yang ditetapkan. Saat Anda memasukkan kunci, Anda menentukan panggilan maksimum per hari dan waktu minimum antar penggunaan.

Memuat kunci:

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)

Kemudian ketika Anda menjalankan scraper Anda misalnya 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'})

menjadi:

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']})

jadi jika Anda memiliki 5 kunci, l.check_out_api_keykembalikan kunci yang paling sedikit menggunakan dan menunggu sampai waktu yang cukup berlalu untuk digunakan lagi.

Akhirnya untuk melihat seberapa sering kunci Anda telah digunakan / sisa penggunaan tersedia:

pprint(l.summary())

Saya tidak menulis ini untuk R karena kebanyakan memo dilakukan dengan python (sebagian besar memo saya). Itu bisa dengan mudah dipindahkan.

Itulah cara Anda secara teknis dapat mengatasi pembatasan tingkat. Secara etis ...

PEMBARUAN Contohnya menggunakan Google Places API di sini


0

Saya telah menemukan cara yang fantastis untuk berkeliling blok alamat IP adalah Amazon AWS (Atau Azure atau layanan on-demand serupa lainnya). Contoh t2.nano dari AWS harganya hampir sama dengan proksi berkualitas tinggi dan lebih dari mampu menangani permintaan dengan tingkat terbatas.

Misalnya, Anda perlu mengikis 100.000 halaman. Menggunakan AWS CLI, program Anda dapat secara otomatis memulai 1.000 instance. Bahkan jika Anda perlu menunggu 2 detik di antara permintaan, Anda masih akan selesai dalam 200 detik. Dan berapa banyak yang Anda bayar untuk itu?

Saat ini, harga untuk turunan t2.nano adalah $ 0,0058 per Jam di wilayah Ohio AWS. Untuk seribu contoh, itu hanya $ 5,8 per jam. Tetapi Anda tidak perlu seluruh jam. Pekerjaan Anda sebanyak 100.000 halaman selesai dalam waktu kurang dari 200 detik. Tambahkan waktu ekstra untuk menyiapkan skrip, instal paket yang diperlukan, zip hasilnya dan mengunduhnya ke server / pc Anda dan Anda masih menggunakan waktu server paling banyak 10 menit per instance.

Atau sekitar satu dolar. 100.000 halaman dalam 200 detik untuk satu dolar. Tidak buruk.

Catatan: Saat penskalaan seperti ini, Anda harus sangat berhati-hati agar tidak secara tidak sengaja membebani target pengikisan. Jika Anda melepaskan senjata sebanyak ini di satu situs web, itu sekitar 1.000 permintaan yang menghantam server setiap detik. Cukup untuk membunuh sebagian besar server web. Jadi, meskipun opsi 1.000 server mungkin merupakan ide bagus jika Anda memiliki daftar situs yang beragam, Anda mungkin perlu menggunakan maksimum 10-20 server jika Anda menekan satu situs.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.