【发布时间】:2015-04-30 12:18:45
【问题描述】:
我正在使用simple_html_dom 开发网络抓取应用程序。我需要提取网页中的所有图像。以下是可能性:
-
<img>标签图片 - 如果同一页面中有带有
<style>标签的css。 - 如果存在带有
<div>或其他标签的内联样式的图像。
我可以使用以下代码抓取所有图像。
function download_images($html, $page_url , $local_url){
foreach($html->find('img') as $element) {
$img_url = $element->src;
$img_url = rel2abs($img_url, $page_url);
$parts = parse_url($img_url);
$img_path= $parts['path'];
$url_to_be_change = $GLOBALS['website_server_root'].$img_path;
download_file($img_url, $GLOBALS['website_local_root'].$img_path);
$element->src=$url_to_be_change;
}
$css_inline = $html->find("style");
$matches = array();
preg_match_all( "/url\((.*?)\)/", $css_inline, $matches, PREG_SET_ORDER );
foreach ( $matches as $match ) {
$img_url = trim( $match[1], "\"'" );
$img_url = rel2abs($img_url, $page_url);
$parts = parse_url($img_url);
$img_path= $parts['path'];
$url_to_be_change = $GLOBALS['website_server_root'].$img_path ;
download_file($img_url , $GLOBALS['website_local_root'].$img_path);
$html = str_replace($img_url , $url_to_be_change , $html );
}
return $html;
}
$html = download_images($html , $page_url , $dir); // working fine
$html = str_get_html ($html);
$html->save($dir. "/" . $ff);
请注意,图片下载后我也在修改 HTML。
下载工作正常。但是当我试图保存 HTML 时,它会给出以下错误:
PHP 致命错误:不能使用 simple_html_dom 类型的对象作为数组
重要提示:如果我不使用 str_replace 和第二个循环,它的工作非常好。
致命错误:无法在第 1167 行的 /var/www/html/app/framework/cache/includes/simple_html_dom.php 中使用 simple_html_dom 类型的对象作为数组
【问题讨论】:
-
str_replace 调用中作为最后一个参数的 $html 是一个对象,而不是一个数组。 str_replace 显然不喜欢那样。您需要找出另一种方法来将该数据表示为一个数组,或者以某种方式对其进行重新处理。
标签: php simple-html-dom