การปรับสเกลข้อมูลอย่างมีจริยธรรมและประหยัดต้นทุน


13

มีบางสิ่งในชีวิตที่ทำให้ฉันมีความสุขเช่นการขูดข้อมูลที่ไม่มีโครงสร้างและไม่มีโครงสร้างจากอินเทอร์เน็ตและใช้มันในแบบจำลองของฉัน

ตัวอย่างเช่นชุด Data Science Toolkit (หรือRDSTKสำหรับโปรแกรมเมอร์ R) ช่วยให้ฉันสามารถดึงข้อมูลตามตำแหน่งที่ดีโดยใช้ IP หรือที่อยู่และแพคเกจtm.webmining.pluginสำหรับ R tmทำให้การคัดลอกข้อมูลทางการเงินและข่าวตรงไปตรงมา เมื่อจะเกิน (กึ่ง) XPathข้อมูลที่มีโครงสร้างเช่นฉันมักจะใช้

อย่างไรก็ตามฉันได้รับปริมาณ จำกัด อย่างต่อเนื่องกับจำนวนข้อความค้นหาที่คุณอนุญาต ฉันคิดว่า Google จำกัด ฉันให้ถึง 50,000 คำขอต่อ 24 ชั่วโมงซึ่งเป็นปัญหาสำหรับ Big Data

จากมุมมองทางเทคนิคการเข้าถึงข้อ จำกัด เหล่านี้เป็นเรื่องง่ายเพียงแค่เปลี่ยนที่อยู่ IP และกำจัดตัวระบุอื่น ๆ จากสภาพแวดล้อมของคุณ อย่างไรก็ตามสิ่งนี้นำเสนอทั้งความกังวลด้านจริยธรรมและการเงิน (ฉันคิดว่า?)

มีวิธีแก้ปัญหาที่ฉันมองเห็นหรือไม่?

คำตอบ:


6

สำหรับ API จำนวนมาก (ส่วนใหญ่ที่ฉันเคยเห็น) การให้คะแนนเป็นฟังก์ชันของคีย์ API หรือข้อมูลรับรอง OAuth (Google, Twitter, NOAA, Yahoo, Facebook, ฯลฯ ) ข่าวดีก็คือคุณไม่จำเป็นต้องปลอมแปลง IP ของคุณคุณเพียงแค่ต้องเปลี่ยนข้อมูลประจำตัวของพวกเขาเมื่อพวกเขาถึงขีด จำกัด อัตรา

การโปรโมตตัวเองที่ไร้ยางอายที่นี่ แต่ฉันเขียนแพคเกจหลามโดยเฉพาะสำหรับการจัดการปัญหานี้

https://github.com/rawkintrevo/angemilner

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

มันต้องมี mongodb daemon และโดยทั่วไปคุณสร้างหน้าสำหรับแต่ละคีย์ของคุณ ดังนั้นคุณมีที่อยู่อีเมล 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)

จากนั้นเมื่อคุณเรียกใช้มีดโกนของคุณเช่น 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())

ฉันไม่ได้เขียนสิ่งนี้สำหรับ R เพราะการขูดส่วนใหญ่ทำในไพ ธ อน (การขูดส่วนใหญ่ของฉัน) มันสามารถย้ายได้ง่าย

นั่นเป็นวิธีที่คุณจะได้รับอัตรา จำกัด ทางเทคนิค จริยธรรม ...

อัปเดตตัวอย่างใช้ Google สถานที่ API ที่นี่


0

ฉันพบวิธีที่ยอดเยี่ยมในการรับบล็อกที่อยู่ IP คือ Amazon AWS (หรือ Azure หรือบริการตามความต้องการอื่น ๆ ที่คล้ายกัน) อินสแตนซ์ t2.nano จาก AWS มีค่าใช้จ่ายเกือบจะเหมือนกับพร็อกซีคุณภาพสูงและมีความสามารถในการจัดการคำขอที่มีอัตรา จำกัด ได้ดี

ตัวอย่างเช่นสมมติว่าคุณต้องขูด 100,000 หน้า การใช้ AWS CLI โปรแกรมของคุณสามารถเริ่มต้นได้ 1,000 อินสแตนซ์โดยอัตโนมัติ แม้ว่าคุณจะต้องรอ 2 วินาทีระหว่างคำขอ แต่คุณก็ยังสามารถทำได้ใน 200 วินาที และคุณจ่ายเท่าไหร่?

ตอนนี้ราคาสำหรับตัวอย่าง t2.nano คือ$ 0.0058 ต่อชั่วโมงในภูมิภาคโอไฮโอของ AWS สำหรับพันครั้งนั่นเป็นเพียง$ 5.8 ต่อชั่วโมง แต่คุณไม่ต้องการทั้งชั่วโมง งาน 100,000 หน้าของคุณเสร็จในเวลาไม่ถึง 200 วินาที เพิ่มเวลาพิเศษในการตั้งค่าสคริปต์ติดตั้งแพคเกจที่ต้องการบีบอัดผลลัพธ์และดาวน์โหลดไปยังเซิร์ฟเวอร์ / พีซีของคุณและคุณยังคงใช้เวลาเซิร์ฟเวอร์สูงสุด 10 นาทีต่ออินสแตนซ์

หรือประมาณหนึ่งดอลลาร์ 100,000 หน้าใน 200 วินาทีสำหรับหนึ่งดอลลาร์ ไม่เลว.

หมายเหตุ: เมื่อปรับขนาดเช่นนี้คุณจะต้องระมัดระวังไม่ให้มีการขูดมากเกินไปโดยไม่ตั้งใจ หากคุณปลดปล่อยพลังอันมหาศาลนี้ในเว็บไซต์เดียวนั่นคือประมาณ 1,000 คำขอที่ส่งผลกระทบต่อเซิร์ฟเวอร์ในทุก ๆ วินาที เพียงพอที่จะฆ่าเว็บเซิร์ฟเวอร์ส่วนใหญ่ ดังนั้นในขณะที่ตัวเลือกเซิร์ฟเวอร์ 1,000 รายการอาจเป็นความคิดที่ดีถ้าคุณมีรายการไซต์ที่หลากหลายคุณอาจต้องใช้เซิร์ฟเวอร์สูงสุด 10-20 เซิร์ฟเวอร์หากคุณกดปุ่มไซต์เดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.