从PHP中的任何网址获取所有图像?

时间:2012-02-28 09:57:12

标签: php

我在网站上输入了url的文本类型。通过发布此url字段的值,我想从该特定URL获取所有可能的图像(如果存在),因为这发生在更新状态textarea的http://facebook.com中。那么php中的代码是什么?

感谢。

1 个答案:

答案 0 :(得分:3)

Facebook拥有OpenGraph协议。您将在Facebook上链接的许多网站都不会呈现图像。这是因为没有og标签的配置。需要非常大量的代码才能真正实现已爬网映像的任何重要结果。

有许多图像不适合使用这种方式,如间隔图像,跟踪图像等...当您从网站上提取所有图像标记时,您将获得大多数这些图像只是死空间。

与往常一样,有多种方法可以解决这个问题。他们都从获取网址的来源开始。 cURL是我实现此目标的首选方法。

从那里你需要解析源中的信息以找到图像的来源。这可以使用regular expressions (regex)完成,或者我首选的方法是在PHP中使用DOMDocument类。

关于如何使用DOMDocument类从图像标记获取源URL的简短示例如下:

// Load your HTML result into $response prior to here.
// Additionally, ensure that you have the root url for the
//     page loaded into $base_url.
$document = new DOMDocument();
$document->loadHTML($response);

$images = array();

// For all found img tags
foreach($document->getElementsByTagName('img') as $img) {
    // Extract what we want
    $image = array(
        // Here we take the img tag, get the src attribute
        //     we then run it through a function to ensure that it is not a
        //     relative url.
        // The make_absolute() function will not be covered in this snippet.
        'src' => make_absolute($img->getAttribute('src'), $base_url),
    );

    // Skip images without src
    if( ! $image['src'])
        continue;

    // Add to collection. Use src as key to prevent duplicates.
    $images[$image['src']] = $image;
}