【问题标题】:Screen Scraping of aspx page using curl [closed]使用 curl 对 aspx 页面进行屏幕抓取 [关闭]
【发布时间】:2012-10-06 09:42:33
【问题描述】:

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

$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);

【问题讨论】:

  • “它不工作”是什么意思?它会抛出错误吗?它应该做什么?你没有给我们足够的继续。
  • 从看教程和学习编程开始,不在这里丢一堆代码加引号。在发布问题之前,请查看您必须经过的询问建议。
  • 另外请正确格式化和缩进你的代码,其他人需要阅读。
  • 您的代码没有说明您无法实现的目标..
  • 抱歉信息不完整。在给定的网址上,有分页。我可以删除第一页,但不能下一个。我将此代码用于第二页,因为当我们单击第 2 页时,“ctl00$ContentPlaceHolderBody$SearchPageNavigationTop$rptPager$ctl01”值被传递给 __doPostBack 函数。所以它没有给出第 2 页的内容。我将此值用于 preg_match("#.*?#mis", $file, $arr_viewstate);

标签: php asp.net curl screen-scraping


【解决方案1】:

事实是我不明白你想要达到什么目的,但我绝对知道那不是获得__VIEWSTATE__EVENTVALIDATION 的方法

应该是这样的

$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);

【讨论】:

  • 我用这个但是给出错误页面。
  • 我正在使用 preg_match("#.*?#mis", $file, $arr_viewstate);
  • 我添加了这段代码,它显示了一个很长的字符串,然后它把对象移到了这里。错误页面。没有我需要的第 2 页内容。
【解决方案2】:

此代码似乎正在工作...将该代码粘贴到一个空白的 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 可能有助于正确加载图像。

【讨论】:

  • 是的,它给出了第一页的内容。我将此用于第二页。任何帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 2012-07-29
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
相关资源
最近更新 更多