多卷曲和simplehtmldom的问题,只抓住标题?

时间:2011-03-19 17:26:43

标签: php dom curl

我正在使用simple curt with simplehtmldom

我在simplehtmldom上阅读本手册:http://simplehtmldom.sourceforge.net/manual_faq.htm#hosting,示例使用curl抓取1个网站,我正在尝试抓取多个我正在使用多卷曲。

但是当我尝试使用带有simplehtmldom的多卷曲时,我从页面的标题部分得到一个错误,它显示我在simple_html_dom.php第39行出现错误的位置

    $dom->load(call_user_func_array('file_get_contents', $args), true);

从这里

// get html dom form file
function file_get_html() {
    $dom = new simple_html_dom;
    $args = func_get_args();
    $dom->load(call_user_func_array('file_get_contents', $args), true);
    return $dom;
}

这是我的多卷曲脚本。

$urls = array(
   "http://www.html2.com", //$res[0]
   "http://www.html1.com" //$res[1]
   );

$mh = curl_multi_init();

foreach ($urls as $i => $url) {
       $conn[$i]=curl_init($url);
       curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);//return data as string 
       curl_setopt($conn[$i],CURLOPT_FOLLOWLOCATION,1);//follow redirects
       curl_setopt($conn[$i],CURLOPT_MAXREDIRS,2);//maximum redirects
       curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,10);//timeout
       curl_multi_add_handle ($mh,$conn[$i]);
}

do { $n=curl_multi_exec($mh,$active); } while ($active);

foreach ($urls as $i => $url) {
       $res[$i]=curl_multi_getcontent($conn[$i]);
       curl_multi_remove_handle($mh,$conn[$i]);
       curl_close($conn[$i]);

}
curl_multi_close($mh);

我用过这个

$html = file_get_html($res[0]);

请帮帮我!

谢谢

1 个答案:

答案 0 :(得分:1)

您可能遇到的错误是:

Warning: file_get_contents(): Filename cannot be empty in /tmp/simple_html_dom.php on line 39

这告诉你传入file_get_html()($ res [0])的内容由于某种原因是空的 - 主要是由于需要一些额外的/不同的CURL参数。实际上,如果你在循环中回显$ res [$ i],你会看到它。

一旦你解决了这个问题,你就会遇到另一个问题 - 你试图将你刚刚抓到的html内容传递给file_get_html(),这是期待某种文件路径,而不是内容。事实上,file_get_contents可以从标准网址中提取,因此如果file_get_contents能够正确提取数据,您可以完全跳过所有卷曲内容。

如果你想保持curl调用,那么你应该将$ res [0]传递给str_get_html(),而不是file_get_html()。