我几个小时前才学会了scrapping和cUrl,从那时起,我就一直在尝试使用它。然而,现在我遇到了一些奇怪的问题。下面的代码可以在一些站点上正常工作,而在其他站点上则无法正常工作(当然,我修改了url和xpath...)。请注意,在测试curl_exec是否已经正确执行时没有引发任何错误。所以问题必须来自于之后的某个地方。我的一些问题如下:
我的php代码:
- 如何检查新的DOMDocument是否已经正确创建:if(??)
- 如何检查新的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";
}
?>
DOMDocument::loadHTML()
的相应返回值,并可能移除抑制运算符@
。 - Linus Kleencurl_getinfo()
和使用CURLINFO_HTTP_CODE
实现)来扩展您的检查。 - Linus Kleen