2016-08-15 2 views
0

JSOUP lib를 사용하여 데이터 스크래핑 소프트웨어를 작성했습니다. 일부 데이터 on this page 및 게시 된 페이지에서 결과를 받고 메신저를 게시 할거야. 모든 것이 완벽하게 작동하지만 최근에 사이트를 업데이트했으며 현재 300-500 개의 결과를 얻은 후에이 페이지를 사용할 수 없으며 앞으로 몇 시간 동안 고장났습니다. 내가 수동으로 다음 데이터 스크래핑 중 프록시 변경

System.setProperty("http.proxyHost", proxy); 
System.setProperty("http.proxyPort", proxyPort); 

프록시

을 변경하면 내 응용 프로그램은 지속적으로 모든 것이 다시 잘 작동한다. 문제는 프록시를 매번 Read time 예외가 발생할 때마다 수동으로 업데이트해야하기 때문입니다.

500+ 결과 후에 block-ip filter을 우회하는 다른 방법이 있습니까? 아니면 내 IP가 차단 될 때마다 혼자 프록시를 입력해야합니까?

+0

가장 좋은 해결책은 원격 서버를 해킹하는 대신 일종의 간단한 트래픽 쉐이핑을 구현하는 것입니다. 즉, 크롤링 속도를 줄이고보다 정중 한 크롤링/스크래핑을 수행하는 것입니다. – haddr

+0

@haddr 좀 더 설명해 주시겠습니까? 예를 들어, 내 스크래핑 속도는 초당 2-3 회의 결과입니다. 내가 1 초당 1 결과로 줄이면 웹 사이트를 차단하지 않을 것이라고 생각하십니까? –

+0

아래의 답변을 참조하십시오, 코멘트 필드는 조금 작습니다. – haddr

답변

1

저는 실제 문제가 프록시를 전환하는 방법이 아니라 목표 시스템에 몇 가지 한계가 있음을 생각합니다. 일부 서버는 과부하 상태이거나 다른 사용자에게도 콘텐츠를 제공해야한다는 점에 유의하십시오. 따라서 일부 크롤링 할당량 또는 기타 DoS 제한을 설정하여 집중적 인 크롤링을 수행하는 한 사람이 로컬 리소스를 소모하는 것이 어렵습니다. 웹 사이트마다 다르지만, 실험을 통해 확인해야합니다. 서버가 초당 2-3 페이지를 제공한다면 그리 나쁘지 않습니다. 예를 들어 Heritrix 크롤러를 확인하십시오. 기본적으로 "Responsible Crawling"[1]에 대한 규칙을 구현합니다. 즉, 크롤러가 원격 서버로 예의를 갖도록 시도합니다. 예를 들어, 기본적으로 동일한 서버에 다른 요청을하기 전에 5 초 동안 대기합니다. 또한 지연 요소 (기본값 5)가 있습니다. 즉, 서버가 응답하는 데 1 초가 걸리면 5 초 안에 1 req를 넘겨서는 안됩니다.

문제로 돌아 오는 : 당신이 확인해야 할 것입니다 :

당신은 시간의 어떤 양 서버에 발행 할 수 있습니다 얼마나 많은 쿼리
  • ? 발견하면 할당량을 초과하지 않도록 주어진 시간 내에 쿼리를 배포하십시오.
  • 어쩌면 한계는 대역폭 기반입니까? HTTP/1.1 및 gzip 압축 사용은 어떻습니까?
  • 원격 서버가 HTTP/1.1을 지원하는 경우 "연결 : 연결 유지"를 사용하고 같은 HTTP 연결을 통해 예를 들어 10 또는 20 개의 쿼리를 만들 수 있습니까?
  • 야간에 크롤러를 실행할 수 있는지 확인하십시오. 서버 사용량이 적어 쿼리 큐를 더 빨리 다운로드 할 수 있습니다.
  • 크롤링에 다소 시간이 걸릴 수 있습니다.

어떤 경우에는 크롤링이 매우 어려울 수 있으며 다른 방문자에게 서비스 할 수있는 리소스가 필요합니다. 나는이 정확히 원래의 문제에 대한 답변 아니라는 것을 알고,하지만 난 당신이 외부 API를 사용하여 상관하지 않는 경우가

[1] https://webarchive.jira.com/wiki/display/Heritrix/Responsible+Crawling

+0

나는 당신의 사고 방식이 정말 좋으며, 이것이 나를 많이 돕고 있습니다. 당신이 옳은 길을 가르쳐 줬어! 감사 –

0

을 :) 해결하는 다른 방법은, 당신이라고 생각 내 https://gimmeproxy.com을 사용해 볼 수 있습니다. 끊임없이 프록시를 확인하고 각 요청마다 임의의 작업을 제공합니다.