如何使用simple-html-dom从网站中提取图像?

时间:2014-09-27 11:54:29

标签: php image parsing html-parsing simple-html-dom

如何从网站中提取图片并使用 simple-html-dom 将其下载到本地文件中,以便从文件加载它们,以避免每次从原始文件加载图像网站。

include ('simple_html_dom.php');

$html = file_get_html('http://www.caradisiac.com/');
    foreach( $html->find('.featured img') as $image ){
        echo $image->src;
        echo "<br>";
    }

请帮帮我!!

1 个答案:

答案 0 :(得分:1)

0 - 确保您已阅读PHP manual以查看PHP具有的所有令人惊奇的内置函数。

1 - 为图片构建本地路径,您可以使用preg_replace来清理网址

2 - 使用file_exists检查图像是否尚未下载,如果是,请加载;否则下载

3 - 使用file_get_contents检索图片(cURL将无用更重)

4 - 使用file_put_contents

将其保存到本地文件
foreach( $html->find('.featured img') as $image )
{
    $imageSrc = $image->src;
    $imageUri = $this->rel2abs($imageSrc, $sourceURI);
    $imageLocalPath = 'getImages/'.preg_replace('/[^a-z0-9-.]/i', '-', $imageUri);

    if (!file_exists($imageLocalPath))
    {
        $imageData = file_get_contents($imageUri, false, $streamContext);
        file_put_contents($imageLocalPath, $imageData);
    }
    else
        $imageData = file_get_contents($imageLocalPath);
}

备注:

  • 您需要rel2abs来解析相对URI或任何适当的pecl扩展名。
  • getImages / 会将所有图片放在子文件夹中:您需要手动创建该子文件夹,或者在PHP代码中检查它是否存在并在需要时创建它
  • $ imageData包含图像的原始数据,您可以使用imagecreatefromstring加载相应的Gd图像。
  • 注意:您从远程网页下载内容,因此您必须信任它。可以在html页面中添加<div class="featured"><img src="http://evil.com/your-heart-will-bleed.php"/></div>之类的标签,并下载邪恶的php文件。最糟糕的是,可以通过访问您的网站http://mywebsite.com/getImages/your-heart-will-bleed.php来执行。