2012-04-23 3 views
1

데이터 페이지를 현명하게 포함하고있는 PHP 컬 코드를 사용하여 aspx 페이지를 스크랩하려고합니다. 처음에는 get 메소드를 사용하여 페이지를로드하지만 페이지 번호를 선택하면됩니다. 드롭 다운에서 post 메소드를 사용하여 페이지를 페이지에 제출합니다.PHP 컬을 사용한 aspx 페이지 스크랩

나는 말풍선을 통과하여 특정 페이지의 데이터를 찾고 싶지만 그럴 수는 없습니다.

다섯 번째 페이지의 레코드를 가져 오기 위해 더미 코드를 만들었지 만 항상 첫 번째 페이지의 결과를 반환합니다.

샘플 코드

$url = 'http://www.ticketalternative.com/SitePages/Search.aspx?catid=All&pattern=Enter%20Artist%2c%20Team%2c%20or%20Venue'; 
$file=file_get_contents($url); 
//<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value= 
preg_match_all("#<input.*?name=\"__VIEWSTATE\".*?value=\"(.*?)\".*?>.*?<input.*?name=\"__EVENTVALIDATION\".*?value=\"(.*?)\".*?>#mis", $file, $arr_viewstate); 
$viewstate = urlencode($arr_viewstate[1][0]); 
$eventvalidation = urlencode($arr_viewstate[2][0]); 
$options = array( 
CURLOPT_RETURNTRANSFER => true, // return web page 
CURLOPT_HEADER => true, // don't return headers 
CURLOPT_FOLLOWLOCATION => true, // follow redirects 
CURLOPT_ENCODING => "", // handle all encodings 
CURLOPT_USERAGENT => "spider", // who am i 
CURLOPT_AUTOREFERER => true, // set referer on redirect 
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect 
CURLOPT_TIMEOUT => 1120, // timeout on response 
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects 
CURLOPT_POST => true, 
CURLOPT_VERBOSE => true, 
CURLOPT_POSTFIELDS => '__EVENTTARGET='.urlencode('ctl00$ContentPlaceHolder1$SearchResults1$SearchResultsGrid$ctl13$ctl05').'&__EVENTARGUMENT='.urlencode('').'&__VIEWSTATE='.$viewstate.'&__EVENTVALIDATION='.$eventvalidation.'&__LASTFOCUS='.urlencode('').'&ctl00$ContentPlaceHolder1$SearchResults1$SearchResultsGrid$ctl13$ctl05=4'); 
$ch = curl_init($url); 
curl_setopt_array($ch,$options); 
$result = curl_exec($ch); 
curl_close($ch); 

preg_match_all('/<a id=\".*?LinkToVenue\" href=\"(.*?)\">(.*?)<\/a>/ms',$result,$matches); 
print_r($matches); 

아무도 내가 잘못 얻고있는 곳으로 나를 도울 수, 나는 그것의 GET 메소드로 처음으로 페이지가로드로 인해 작업을 우리가 페이지에서 이동로 사용하는 링크 생각하지 않는다 게시하다.

특정 페이지의 레코드를 어떻게받을 수 있습니까? 클라이언트가 필요하지만 내가 PHP와의 ASP.NET 사이트를 긁어하려고하지 않을 것이다 때때로 때

안부

+1

ASP.NET의 ViewState 유효성 검사로 인해 POST를 수행하지 못할 수 있습니다. 모든 양식 값의 우스운 해시입니다. – jrummell

+0

@jrummell - 이것을 극복하기 위해 할 수있는 일은 무엇입니까? – mauzzamali

+0

POST 변수와 사용하지 않는 페이지의 ViewState 해시를 기반으로 ViewState 해시를 어떻게 든 다시 만들어야합니다. 어떻게 할 수 있을지 모르겠습니다. aspx 소스에 액세스 할 수 있습니까? GET 매개 변수를 대신 받아 들일 수 있습니까? – jrummell

답변

-2

나는 PHP에서 스크레이퍼 물품. 그 때문에 펄 파이썬이나 루비가 필요합니다. 3 개 모두가 보통 쉽게 사용할 수있는 기계화 라이브러리를 가지고 있습니다.