我剛剛知道什麼scrapping和cUrl是在幾個小時前,從那以後我玩了。儘管如此,我現在面臨一些奇怪的事情。下面的代碼可以在一些網站上正常工作,而不是與其他網站一起工作(當然我修改了url和xpath ...)。請注意,當我測試curl_exec是否正確執行時,我沒有提出錯誤。所以這個問題必須來自某個地方。我的一些問題如下:PHP刮擦捲曲 - 我如何調試
- 我如何檢查,如果新的DOM文檔已正確創建:如果(??)
- 我如何檢查新的DOMDocument已經與HTML正確填充?
- ...如果創建了新的DOMXPath對象?
希望我很清楚。預先感謝您的回覆。乾杯。馬克
我的PHP:
<?php
$target_url = "http://www.somesite.com";
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';
// make the cURL request to $target_url
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html= curl_exec($ch);
if (!$html) {
echo "<br />cURL error number:" .curl_errno($ch);
echo "<br />cURL error:" . curl_error($ch);
exit;
}
// parse the html into a DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($html);
// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->query('somepath');
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
echo "<br />Link: $url";
}
?>
+1對於不使用reg-ex「解析」HTML。爲了檢測錯誤,請檢查['DOMDocument :: loadHTML()'](http://www.php.net/manual/en/domdocument.loadhtml.php)的相應返回值,並可能刪除抑制運算符' @'。 – 2012-03-12 12:24:18
你好Linus。感謝您的幫助。你能幫我一下語法嗎?應該是:if(DOMDocument :: loadHTML($ html){} else {})? – Marc 2012-03-12 12:32:18
你也可以通過探測HTTP響應代碼來擴展你的「did-curl-execute」檢查(這是通過['curl_getinfo()']完成的(http://php.net/manual/en/function.curl-getinfo .php)並使用'CURLINFO_HTTP_CODE')成功執行'curl_exec()'後。 – 2012-03-12 13:11:19