Quy mô dữ liệu quy mô và đạo đức


13

Vài điều trong cuộc sống mang lại cho tôi niềm vui như cạo dữ liệu có cấu trúc và không cấu trúc từ Internet và sử dụng nó trong các mô hình của tôi.

Chẳng hạn, Bộ công cụ khoa học dữ liệu (hoặc RDSTKdành cho lập trình viên R) cho phép tôi lấy nhiều dữ liệu dựa trên vị trí tốt bằng cách sử dụng IP hoặc địa chỉ và gói tm.webmining.pluginfor R tmgiúp loại bỏ dữ liệu tài chính và tin tức một cách đơn giản. Khi đi xa hơn những dữ liệu có cấu trúc (bán) như vậy tôi có xu hướng sử dụng XPath.

Tuy nhiên, tôi liên tục bị điều chỉnh bởi các giới hạn về số lượng truy vấn bạn được phép thực hiện. Tôi nghĩ rằng Google giới hạn tôi khoảng 50.000 yêu cầu mỗi 24 giờ, đây là một vấn đề đối với Dữ liệu lớn.

Từ góc độ kỹ thuật, việc vượt qua các giới hạn này rất dễ dàng - chỉ cần chuyển đổi địa chỉ IP và lọc các định danh khác khỏi môi trường của bạn. Tuy nhiên, điều này thể hiện cả mối quan tâm về đạo đức và tài chính (tôi nghĩ sao?).

Có một giải pháp mà tôi đang xem?

Câu trả lời:


6

Đối với nhiều API (hầu hết tôi đã thấy), việc chuẩn bị là một chức năng của thông tin API Key hoặc OAuth của bạn. (Google, Twitter, NOAA, Yahoo, Facebook, v.v.) Tin vui là bạn sẽ không cần phải giả mạo IP của mình, bạn chỉ cần trao đổi thông tin đăng nhập khi chúng đạt đến giới hạn tỷ lệ.

Một chút tự quảng cáo không biết xấu hổ ở đây nhưng tôi đã viết một gói python đặc biệt để xử lý vấn đề này.

https://github.com/rawkintrevo/angemilner

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

Nó đòi hỏi một daemon mongodb và về cơ bản bạn tạo một trang cho mỗi một phím của bạn. Vì vậy, bạn có 4 địa chỉ email, mỗi địa chỉ được gán một khóa riêng. Khi bạn tải khóa vào, bạn chỉ định các cuộc gọi tối đa mỗi ngày và thời gian tối thiểu giữa các lần sử dụng.

Tải các phím:

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)

Sau đó, khi bạn chạy cạp của bạn, ví dụ như 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'})

trở thành:

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

Vì vậy, nếu bạn có 5 khóa, hãy l.check_out_api_keytrả về khóa có ít sử dụng nhất và đợi cho đến khi hết thời gian để sử dụng lại.

Cuối cùng để xem mức độ thường xuyên sử dụng khóa của bạn / sử dụng còn lại:

pprint(l.summary())

Tôi đã không viết điều này cho R bởi vì hầu hết việc cạo được thực hiện bằng trăn (hầu hết việc cạo của tôi). Nó có thể dễ dàng chuyển.

Đó là cách bạn có thể có được về mặt giới hạn tỷ lệ. Về mặt đạo đức ...

CẬP NHẬT Ví dụ sử dụng API Google Địa điểm tại đây


0

Tôi đã tìm thấy một cách tuyệt vời để đi xung quanh các khối địa chỉ IP là Amazon AWS (Hoặc Azure hoặc bất kỳ dịch vụ theo yêu cầu tương tự nào khác). Một ví dụ t2.nano từ AWS có giá gần bằng một proxy chất lượng cao và có khả năng xử lý các yêu cầu giới hạn tỷ lệ tốt hơn.

Ví dụ: giả sử bạn cần cạo 100.000 trang. Sử dụng AWS CLI, chương trình của bạn có thể tự động bắt đầu 1.000 trường hợp. Ngay cả khi bạn cần đợi 2 giây giữa các yêu cầu, bạn vẫn sẽ hoàn thành sau 200 giây. Và bạn trả bao nhiêu cho nó?

Ngay bây giờ, giá cho một ví dụ t2.nano là $ 0,0058 mỗi giờ trong khu vực AWS ở Ohio. Đối với một nghìn trường hợp, đó chỉ 5,8 đô la mỗi giờ. Nhưng bạn không cần cả giờ. Công việc 100.000 trang của bạn đã hoàn thành sau chưa đầy 200 giây. Thêm một chút thời gian để thiết lập tập lệnh, cài đặt các gói cần thiết, nén kết quả và tải chúng xuống máy chủ / pc của bạn và bạn vẫn sử dụng tối đa 10 phút thời gian của máy chủ mỗi lần.

Hoặc khoảng một đô la. 100.000 trang trong 200 giây cho một đô la. Không tệ.

Lưu ý: Khi nhân rộng như thế này, bạn phải rất cẩn thận về việc không vô tình làm quá tải mục tiêu cào. Nếu bạn giải phóng nhiều hỏa lực này trên một trang web, thì đó là khoảng 1.000 yêu cầu tấn công máy chủ mỗi giây. Đủ để giết hầu hết các máy chủ web. Vì vậy, trong khi tùy chọn 1.000 máy chủ có thể là một ý tưởng tốt nếu bạn có danh sách các trang web đa dạng, có thể bạn sẽ cần sử dụng tối đa 10-20 máy chủ nếu bạn truy cập vào một trang web.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.