-2

私はこのコードを使用していますが、機能していません。助けてください

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

2 に答える 2

2

真実は、あなたが達成したいことを理解していないということですが、それが達成する方法ではないことは間違いありません__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);
于 2012-10-06T10:05:26.480 に答える
0

このコードは機能しているようです...そのコードを空のphpファイルに貼り付けると、ターゲットURLのコンテンツが取得されます。ただし、画像が壊れている、スタイルシートが引っ張られない、javascript が機能しない。

そのような Web ページ全体、特に相対 URL、画像、CSS、JavaScript などを使用するページ全体をスクレイピングする際の問題は、意図したとおりに機能しません。

ページをスクレイピングして結果を吐き出したい場合は、コードの最後の数行を次のように置き換えてみてください。

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

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

相対 URL が で始まっていることにたまたま気づいた../../../../ので、絶対 URL にすることで画像を正しくロードできる場合があります。

于 2012-10-06T09:52:52.490 に答える