2014-04-05 2 views
3

http://www.car4you.at/Haendlersuche 20 개의 결과를 처음으로 그리고 페이지 매김을 보여줍니다. 나는 20 개의 링크를 성공적으로 긁어 냈지만 문제는 페이지 번호가 href 인 페이지 매김이 없기 때문에 다음 페이지로 연결되는 링크를 얻으려고했다. 그것은 자바 스크립트 기능이 포함되어 있습니다.URL을 컬하고, 아약스 버튼을 클릭하고, 응답을 기다리십시오.

제 질문은 어떻게 페이지를 컬링하고 다음 페이지 버튼을 클릭하여 응답을 기다리고 파싱 할 수 있습니까? 여기

내가 컬

function postCurlReq($loginActionUrl,$parameters,$referer) 
{ 
     curl_setopt ($this->curl, CURLOPT_URL,$loginActionUrl); 
     curl_setopt ($this->curl, CURLOPT_POST, 1); 
     curl_setopt ($this->curl, CURLOPT_POSTFIELDS, $parameters); 
     curl_setopt ($this->curl, CURLOPT_COOKIEJAR, realpath('cookie.txt')); // cookie.txt should be in same directoy, where calling script is 
     curl_setopt ($this->curl, CURLOPT_COOKIEFILE, realpath('cookie.txt')); 
     curl_setopt ($this->curl, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt ($this->curl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($this->curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i586; de; rv:5.0) Gecko/20100101 Firefox/5.0');    
     curl_setopt ($this->curl, CURLOPT_REFERER, $referer); // set referer 
     curl_setopt ($this->curl, CURLOPT_SSL_VERIFYPEER, FALSE);// ssl certificate 
     curl_setopt ($this->curl, CURLOPT_SSL_VERIFYHOST, 2); 
     $result['EXE'] = curl_exec($this->curl); 
     $result['INF'] = curl_getinfo($this->curl); 
     $result['ERR'] = curl_error($this->curl); 
     return $result;     
} 

기능을 시도하고 무엇이며 코드 페이지 매기기에 긁어

$loginUrl = "http://www.car4you.at/Haendlersuche"; 
$parameters = array("href" => "javascript:AjaxCallback_ResList('ResultList', 'Pager', '1_1874')"); 
$referer = "http://www.car4you.at/Haendlersuche"; 

$loginHTML = $crawler->postCurlReq($loginUrl,$parameters,$referer); 

if (empty($loginHTML['ERR'])) { // if no error occure in opening url 

print_r($loginHTML['EXE']); 

} 

초 방법으로 시도 (10)과 같은 결과를 보여 선택 목록입니다 내 스크립트가 50을 선택하는 데 성공하면 b도됩니다. b 그냥 사이트에서 HTML 응답을 따기, 당신은 브라우저를 실행하지 않는 사이트를 긁어 때 전자 행복 일 과 노력 코드는 선택 목록

$loginUrl = "http://www.car4you.at/Haendlersuche"; 
$parameters = array("value" => "50"); 
$referer = "http://www.car4you.at/Haendlersuche"; 

$loginHTML = $crawler->postCurlReq($loginUrl,$parameters,$referer); 

if (empty($loginHTML['ERR'])) { // if no error occure in opening url 

print_r($loginHTML['EXE']); 

} 
+0

나는 지금 당장 직면 한 똑같은 문제! – sunny

+0

흠. 만약 당신이 솔루션을 얻을 너무 여기에 제공하십시오 –

+0

m 죄송합니다! 나는 정말로 그것을 가지지 않고있다! 페이지 매기기가없는 페이지로 이동했습니다! – sunny

답변

2

입니다. 즉, JavaScript 코드를 실행하거나 직접 구문 분석하거나 라이브러리를 사용하여 구문 분석을 수행 할 수 없습니다.

그러나 더 많은 결과를 가져 오는 모든 AJAX 버튼은 GET 또는 POST 변수와 함께 다른 URL을 호출하고 결과를 구문 분석하거나 페이지의 HTML 어딘가에 붙여야합니다. Chrome의 개발자 도구 또는 Firebug 등을 사용하여 어떤 URL 호출이 이루어지고 있는지 확인할 수 있습니다. 그런 다음 원본 URL 대신이 URL을 긁어 정보를 추출 할 수 있습니다.

AJAX 요청에 많은 POST 변수가 있기 때문에이 특별한 경우에는 매우 까다 롭습니다. 패턴을 알아내는 일은 간단하지 않지만 JavaScript를 에뮬레이트하려는 것보다 쉽고, 아마도 더 쉽습니다.

일반적으로 스크래핑에서 자바 스크립트 실행을 시뮬레이트하고 싶다면 브라우저를 실행하고 프로그래밍 방식으로 상호 작용할 수 있습니다. 이것은 Selenium이하는 일이며, 나는 이것과 같은 것이 셀레늄과 함께 꽤 고통없이 할 수 있다고 생각합니다. AJAX 요청을 스니핑하여 더 쉽게 수행 할 수 있습니다.

+0

자세한 답변을 보내 주신 고마워요. –

+0

문제 없습니다. 희망이 도움이됩니다. – gandaliter

관련 문제