데이터 스크랩을 윤리적이고 비용 효율적으로 확장


13

인터넷에서 구조화되고 구조화되지 않은 데이터를 긁어 내 모델에서 사용하는 것과 같은 즐거움을주는 것은 거의 없습니다.

예를 들어 Data Science Toolkit (또는 RDSTKR 프로그래머 용)을 사용하면 IP 또는 주소를 사용하여 좋은 위치 기반 데이터를 많이 가져올 수 있으며 tm.webmining.pluginR tm패키지는 재무 및 뉴스 데이터를 간단하게 폐기 할 수 있습니다. 이러한 (반) 구조적 데이터를 넘어 서면 나는 사용하는 경향이 있습니다 XPath.

그러나 나는 당신이 할 수있는 쿼리의 수에 대한 제한으로 끊임없이 스로틀되고 있습니다. Google은 24 시간당 약 50,000 건의 요청으로 제한한다고 생각합니다. 이는 빅 데이터의 문제입니다.

기술적 인 관점에서 이러한 한계를 극복 하는 것은 쉽습니다. 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 데몬이 필요하며 기본적으로 각 키마다 페이지를 만듭니다. 따라서 각각 별도의 키가 할당 된 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())

대부분의 스크래핑은 파이썬 (대부분의 MY 스크래핑)으로 이루어지기 때문에 R에 이것을 쓰지 않았습니다. 쉽게 이식 할 수 있습니다.

이것이 기술적 으로 속도 제한을 극복 할 수있는 방법 입니다. 윤리적으로 ...

업데이트 예에서는 Google Places API를 사용 합니다.


0

IP 주소 블록을 돌파하는 환상적인 방법은 Amazon AWS (또는 Azure 또는 기타 유사한 온 디맨드 서비스)입니다. AWS의 t2.nano 인스턴스는 고품질 프록시와 거의 동일하며 속도 제한 요청을 처리 할 수 ​​있습니다.

예를 들어 100,000 페이지를 긁어 내야한다고 가정 해 봅시다. AWS CLI를 사용하면 프로그램에서 1,000 개의 인스턴스를 자동으로 시작할 수 있습니다. 요청 사이에 2 초 동안 기다려야하더라도 여전히 200 초 안에 완료됩니다. 그리고 얼마를 지불합니까?

현재 t2.nano 인스턴스의 가격 은 AWS의 오하이오 지역에서 시간당 0.0058 USD 입니다. 천 건의 경우 시간당 $ 5.8입니다. 그러나 당신은 전체 시간이 필요하지 않습니다. 100,000 페이지의 작업이 200 초 이내에 완료되었습니다. 스크립트 설정, 필수 패키지 설치, 결과 압축 및 서버 / PC로 다운로드에 추가 시간을 추가하면 인스턴스 당 최대 10 분의 서버 시간이 계속 사용됩니다.

아니면 약 1 달러. 1 달러에 200 초에 100,000 페이지 나쁘지 않다.

참고 : 이와 같이 스케일링 할 때 스크래핑 대상에 실수로 과부하가 걸리지 않도록주의해야합니다. 단일 웹 사이트에서이 정도의 화력을 발휘한다면, 매 초마다 서버에 약 1,000 건의 요청이 발생합니다. 대부분의 웹 서버를 죽일 수 있습니다. 따라서 다양한 사이트 목록이있는 경우 1,000 대의 서버 옵션을 사용하는 것이 좋습니다. 단일 사이트를 방문하는 경우 최대 10-20 대의 서버를 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.