我正在使用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]);
请帮帮我!
谢谢
答案 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()。