2016-08-10 2 views
1

주어진 URL에서 HTML 문서를 긁어 야합니다. 내 localhost에서 Phantom JS 스크립트는 URL을 잘 반환하고 있습니다.PhantomJS는 로컬 호스트에서는 상태 200을, 라이브 서버에서는 403을 반환합니다.

phantomjs scraper.js http://www.submarino.com.br/produto/126862765/ 

스크레이퍼 다른 페이지에 잘 작동 :하지만 라이브 서버에 나는 403 금지 된 상태를

scraper.js

var system = require('system'); 
var page = require('webpage').create(); 

$url = system.args[1]; 

page.open($url, function(status) { 


    if (status == "success") { 

     var content = page.content; 
     console.log(content); 
    } 

    phantom.exit(); 

}); 

PhantomJS 명령을 얻는다. 그러나 도메인 www.submarino.com.br 및 www.americanas.com.br은 작동하지 않습니다. Akamai와 관련이 있다는 것을 알고 있습니다. 오류 출력 응답은 다음과 같습니다 잘 작동 할 때

Response (#1, stage "start"): {"body":"","bodySize":300,"contentType":"text/html","headers":[{"name":"Server","value":"AkamaiGHost"},{"name":"Mime-Version","value":"1.0"},{"name":"Content-Type","value":"text/html"},{"name":"Content-Length","value":"300"},{"name":"Expires","value":"Wed, 10 Aug 2016 00:38:13 GMT"},{"name":"Date","value":"Wed, 10 Aug 2016 00:38:13 GMT"},{"name":"Connection","value":"close"},{"name":"Set-Cookie","value":"MobileOptOut=1; path=/; domain=submarino.com.br\nb2wChannel=INTERNET; path=/; domain=submarino.com.br"},{"name":"Vary","value":"Accept-Encoding, User-Agent"}],"id":1,"redirectURL":null,"stage":"start","status":403,"statusText":"Forbidden","time":"2016-08-10T00:38:13.540Z","url":"http://www.submarino.com.br/produto/126862765/"} 
Response (#1, stage "end"): {"contentType":"text/html","headers":[{"name":"Server","value":"AkamaiGHost"},{"name":"Mime-Version","value":"1.0"},{"name":"Content-Type","value":"text/html"},{"name":"Content-Length","value":"300"},{"name":"Expires","value":"Wed, 10 Aug 2016 00:38:13 GMT"},{"name":"Date","value":"Wed, 10 Aug 2016 00:38:13 GMT"},{"name":"Connection","value":"close"},{"name":"Set-Cookie","value":"MobileOptOut=1; path=/; domain=submarino.com.br\nb2wChannel=INTERNET; path=/; domain=submarino.com.br"},{"name":"Vary","value":"Accept-Encoding, User-Agent"}],"id":1,"redirectURL":null,"stage":"end","status":403,"statusText":"Forbidden","time":"2016-08-10T00:38:13.541Z","url":"http://www.submarino.com.br/produto/126862765/"} 

그것은 반환

Response (#1, stage "start"): {"body":"","bodySize":30076,"contentType":"text/html;charset=UTF-8","headers":[{"name":"Content-Encoding","value":"gzip"},{"name":"Content-Type","value":"text/html;charset=UTF-8"},{"name":"Server","value":"Apache-Coyote/1.1"},{"name":"X-Powered-By","value":"JSF/1.2"},{"name":"x-tid","value":"CATALOGO-0d4d336f-c0f1-4b71-9663-28fa89b5c123"},{"name":"Cache-Control","value":"max-age=1800"},{"name":"Expires","value":"Wed, 10 Aug 2016 01:10:18 GMT"},{"name":"Date","value":"Wed, 10 Aug 2016 00:40:18 GMT"},{"name":"Connection","value":"keep-alive"},{"name":"Set-Cookie","value":"MobileOptOut=1; path=/; domain=submarino.com.br\nb2wChannel=INTERNET; path=/; domain=submarino.com.br"},{"name":"Vary","value":"Accept-Encoding, User-Agent"}],"id":1,"redirectURL":null,"stage":"start","status":200,"statusText":"OK","time":"2016-08-10T00:40:18.388Z","url":"http://www.submarino.com.br/produto/126862765/"} 
Response (#1, stage "end"): {"contentType":"text/html;charset=UTF-8","headers":[{"name":"Content-Encoding","value":"gzip"},{"name":"Content-Type","value":"text/html;charset=UTF-8"},{"name":"Server","value":"Apache-Coyote/1.1"},{"name":"X-Powered-By","value":"JSF/1.2"},{"name":"x-tid","value":"CATALOGO-0d4d336f-c0f1-4b71-9663-28fa89b5c123"},{"name":"Cache-Control","value":"max-age=1800"},{"name":"Expires","value":"Wed, 10 Aug 2016 01:10:18 GMT"},{"name":"Date","value":"Wed, 10 Aug 2016 00:40:18 GMT"},{"name":"Connection","value":"keep-alive"},{"name":"Set-Cookie","value":"MobileOptOut=1; path=/; domain=submarino.com.br\nb2wChannel=INTERNET; path=/; domain=submarino.com.br"},{"name":"Vary","value":"Accept-Encoding, User-Agent"}],"id":1,"redirectURL":null,"stage":"end","status":200,"statusText":"OK","time":"2016-08-10T00:40:18.390Z","url":"http://www.submarino.com.br/produto/126862765/"} 

나는 컬링에게 hurl.it 및 기타 컬 서비스에서이 사이트를 시도하고는 URL에 액세스 할 수 있습니다. 내가 할 수있는 일이 있습니까? 이것은 나를 미치게하고있다!

답변

2

지리적 또는 의심스러운 IP 범위 제한 일 가능성이 큽니다. 나는 지금 막 URL을 열려고 시도했고 또한 페이지를 거부 한 다음 미국인 프록시를 통해 액세스하여 열 수있었습니다. 미국식 또는 브라질리아 식 프록시 만 사용하십시오. 또한

는 가능한 한 가까운 실제 브라우저의 동작을 모방하는 것이 중요된다고 할 때, 그래서 당신은 당신의 스크립트에 사용자 에이전트와 뷰포트 에뮬레이션을 추가 좋을 것 :

page.viewportSize = { width: 1280, height: 800 }; 
page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"; 

는 또한 오류에 가입해야하고 콘솔 메시지는 대상 페이지의 모든 오류 및 메시지를 인식합니다.

page.onConsoleMessage = function(msg) { 
    console.log('CONSOLE: ' + msg); 
}; 

page.onError = function (msg, trace) 
{ 
    console.log(msg); 
    trace.forEach(function(item) { 
     console.log(' ', item.file, ':', item.line); 
    }) 
} 
+1

어떤 프록시 서비스를 사용하셨습니까? PC를 프록시로 사용하려고 시도했지만 작동하지 않았습니다. – pcezar91

+0

사용하는 프로그램에 관계없이 Akamai가 만족하지 않는 IP 주소는 PC에 여전히 있습니다. 예를 들어 NY에서 Digital Ocean 방울을 얻고 프록시로 SSH 터널을 설정하십시오. – Vaviloff

관련 문제