-
PHP 스누피로 사이트 긁어오기가 되지 않는 사이트를 긁어오는 3가지 방법파싱의 추억 2010. 4. 19. 00:31
사이트를 긁어오기를 하다보면 fsockopen(): unable to connect to 라는 에러가 나면서 사이트 긁어오기가 되지 않는 경우가 종종있다. 특히 외국 사이트중에 그런 곳이 많다. 사이트를 방문하지 않고 내용만 쏙 빼가는게 탐탁치 않아서 막아 놓은경우도 있고, 국가적인 차원에서 차단을 시킨경우도 있다.예를 들어 , 일본 최대 AV 회사중에 하나인 DMM은 한국에서 들어오는 방문자를 차단시켜놓았다. 실제로 AV를 구매하지도 않으면서 트래픽은 엄청나게 잡아 먹기 때문이다. 또 다른예로 , 미국 국가 기관들중에는 미국에서 접속하지 않으면 페이지에 접근할수도 없는곳들이 있다. 재미있는건 웹브라우져를 열어서 보면 열리는데, 스누피로 긁어올려고 하면 안된다는 점이다.
현재 내가 발견한 사이트 긁어오기가 안되는 사이트의 유형은 세가지다. 세션을 물고 들어가야지만 페이지가 열리는 경우와 자기 자신의 도메인에서 오지 않을 경우 정상적인 접근이 아니라고 하는 경우 , 그리고 특정 국가의 아이피를 아예 차단시킨경우다.
1. 세션을 물고 들어가야 하는 경우
이 경우는 사이트 관리자가 임의로 막아놓은 경우다. 로봇이 아닌 사람이 직접 들어와야만 접근이 가능하게 하기 위해서다. 웹브라우져로 직접 주소를 클릭하고 들어와야만 페이지가 열린다. 이 경우에는 보통 세션을 임의로 먹여서 차단하는데.. 스누피에서 세션을 강제로 먹여주면 된다.
사용법은 간단하다. 스누피 fetch 하기전에 아래와 같이 세션값을 임의로 먹여준다.
$snoopy->cookies["SessionID"] = 세션값;물론, 사이트에서 사용하는 세션변수를 찾아내야한다. 사실 세션변수라기 보다 쿠키값이다. 자바스크립트로 생성해서 쓰는 경우가 많기 때문에 사이트의 소스를 면밀히 관찰하면 대충 세션변수와 넣어야하는 값을 알아 낼 수가 있었다. 불가능한 경우도 있지만 내 경험상 왠만한곳은 다 가능했다.
2. 자기 자신의 도메인으로 부터 들어오지 않으면 막아버리는 경우
보통 페이지가 아이프레임으로 구성된경우 이런 경우가 많았다. 아마도 외부에서 아이프레임안의 내용만 링크해서 가져가지 못하도록 하기 위해서가 아닌가 한다.
위와 마찬가지로 fetch 하기전에 아래와 같이 값을 먹여준다.
$snoopy->referer = “접속한 도메인";
이 방법은 자기가 어디서 왔는지 숨길때도 유용하다. 접속한 도메인을 naver.com으로 한다면, 상대방 로그기록에는 네이버에서 방문한것처럼 보일것이다.
3. 외국 사이트가 한국 ip를 아예 차단한 경우
우리나라 정부에서 차단할때도 있고 , 외국에서 한국을 차단할때도 있다. 두 경우다 우회경로를 통하면 접근할수 있다. 우회경로를 프록시라고 부른다. 바로 가는게 아니라 다른곳을 들렀다가 가는것이기 때문에 속도는 조금 느리다.
프록시서버들 중에 유료도 있고 무료도 있는데, 왠만한곳은 무료로 가능하다. 아래는 무료프록시 서버를 보여주는 사이트들이다.
위 사이트들에서 좋은 프록시 서버를 찾았으면 아래와 같이 세팅해준다.
$snoopy->proxy_host = “프록시서버";
$snoopy->proxy_port = "프록시 서버 포트번호";무료프록시를 쓰다보면 아래 에러가 뜰때가 있다.
You are trying to use a node of the CoDeeN CDN Network. Your IP address is not recognized as a valid PlanetLab address, so your request rate is being limited. ...
에러가 한번뜨면 같은 프록시로는 더 이상 접근이 안된다. 원인은 프록시서버가 결국은 트래픽을 토스해서 우리쪽으로 넘겨주는데, 너무 과도하게 토스를 시킬때 나는 에러다. 한마디로 너무 혹사를 시켜서 니 아이피와는 더이상 못해먹겠다는 것이다.
이럴때는 다른 프록시서버로 변경해주면 되지만, 매번 그럴수도 없는 노릇이다. 유료를 쓰거나 자동으로 무료프록시를 변경해주게 설정해줘야한다.
이상이다. 외국 사이트에서 주기적으로 자료를 받아와야하는 노가다가 있을때.. 위와 같은 방법으로 해봄직하다. 노가다는 컴퓨터에게 시키시고 자네는 영화나 한편 다운받아 보는게 어떠한가?
사이트 파싱에 궁금한점이나, 의뢰는 로 주세요 ^^
'파싱의 추억' 카테고리의 다른 글
네이버 블로그에서 티스토리로 이사하는 3가지 방법 (24) 2010.09.16 7만원으로 집에서 리눅스 웹서버를 돌려볼까? (28) 2010.04.20 PHP 정규표현식을 이용해서 사이트 긁어보자 (노가다 없이 자료 수집하는 방법) (16) 2010.03.27 네이버 블로그를 티스토리로 자동으로 이사하기 (76) 2009.11.11 [php+snoopy] 나눔로또에서 로또번호 긁어오기 (10) 2009.04.30