Php 使用curl对aspx页面进行屏幕抓取

Php 使用curl对aspx页面进行屏幕抓取,php,asp.net,curl,screen-scraping,Php,Asp.net,Curl,Screen Scraping,我正在使用此代码,但它不起作用。请帮忙 $url = "http://www.riogrande.com/Category/Findings-and-Finished-Jewelry/132/Bails-and-Enhancers/472"; $file=file_get_contents($url); preg_match("#.*?#mis", $file, $arr_viewstate); $viewstate = urlencode($arr_viewstate[1]); $eventv

我正在使用此代码,但它不起作用。请帮忙

$url = "http://www.riogrande.com/Category/Findings-and-Finished-Jewelry/132/Bails-and-Enhancers/472";
$file=file_get_contents($url);
preg_match("#.*?#mis", $file, $arr_viewstate);
$viewstate = urlencode($arr_viewstate[1]);
$eventvalidation = urlencode($arr_viewstate[2]);
$options = array(
    CURLOPT_RETURNTRANSFER => true, // return web page
    CURLOPT_HEADER => false, // don't return headers
    CURLOPT_ENCODING => "", // handle all encodings
    CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7'", // 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$ContentPlaceHolderBody$SearchPageNavigationTop$rptPager$ctl01').'&__EVENTARGUMENT='.urlencode('').'&__VIEWSTATE='.$viewstate.'&__EVENTVALIDATION='.$eventvalidation.'&__LASTFOCUS='.urlencode('')
);

$ch = curl_init($url);
curl_setopt_array($ch,$options);

此代码似乎正在运行。。。将代码粘贴到一个空白的php文件中,我得到了目标URL的内容。然而,图像被破坏了,样式表没有被提取,javascript无法工作

像这样抓取整个网页的问题,特别是使用相对URL、图像、CSS、JavaScript等的网页,将无法正常工作

如果您坚持抓取页面并吐出结果,请尝试将最后几行代码替换为以下代码:

$result = curl_exec($ch); 
curl_close($ch);

$result = str_replace("../../../../","http://www.riogrande.com/",$result);
echo $result;

我只是碰巧注意到相对URL是以
。/../../../../
开始的,因此将它们设置为绝对URL可能有助于正确加载图像。

事实是,我不明白您想要实现什么,但我明确知道,这不是获得
\u视图状态
\u事件验证

应该是这样的

$url = "http://www.riogrande.com/Category/Findings-and-Finished-Jewelry/132/Bails-and-Enhancers/472";
$html = file_get_contents($url);

preg_match('~<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />~',$html,$viewstate);
preg_match('~<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />~',$html,$eventvalidation);

$viewstate = $viewstate[1];
$eventvalidation = $eventvalidation[1] ;

var_dump($viewstate,$eventvalidation);
$url=”http://www.riogrande.com/Category/Findings-and-Finished-Jewelry/132/Bails-and-Enhancers/472";
$html=文件内容($url);
预匹配(“~~”,$html,$viewstate);
预匹配(“~~”,$html,$eventvalidation);
$viewstate=$viewstate[1];
$eventvalidation=$eventvalidation[1];
var_dump($viewstate,$eventvalidation);

你说的“它不工作”是什么意思?这是一个错误吗?它应该做什么?你没有给我们足够的时间继续下去。它从阅读教程和学习编程开始,而不是在这里扔掉一堆代码并添加引号。在发布问题之前,请参阅“询问建议”,您必须先了解这些建议。另外,请正确设置代码格式并缩进代码,其他人需要阅读。您的代码没有说明您无法实现的目标。抱歉,信息不完整。在给定的url上,存在分页。我可以删掉第一页,但不能删掉下一页。我将此代码用于第2页,因为当我们单击第2页时,“ctl00$ContentPlaceholder Body$SearchPageNavigationTop$rptPager$ctl01”值会传递给u doPostBack函数。所以它没有给出第2页的内容。我将此值用于preg_match(“#.*?#mis”,$file,$arr_viewstate);我使用了这个但给出了错误页面。我使用的是preg_match(“#.*?#mis”,$file,$arr_viewstate);完美地工作我添加了这个代码,它显示了一个长字符串,之后它给出了移动到这里的对象。错误页。第2页没有我需要的内容。是的,它给出了第1页的内容。我用这个做第二页。有什么帮助吗