从特定div获取图像仅通过PHP中的DOMDocument

时间:2013-10-07 19:12:39

标签: php xpath domdocument

我有网站,我在特定div中发布了几张图片: -

<div class="posts">
    <div class="separator">
        <img src="http://www.example.com/image.jpg" />
        <p>Be, where I am today, and i will be one where you will search me tomorrow</p>
    </div>
    <div class="separator">
        <img src="http://www.example.com/imagesda.jpg" />
        <p>Be, where I am today, and i will be one where you will search me tomorrow</p>
    </div>
.... few more images
</div>

从我的第二个网站,我想获取该特定div上的所有图像..我有下面的代码。

<?php
$htmlget = new DOMDocument();

@$htmlget->loadHtmlFile('http://www.example.com');

$xpath = new DOMXPath( $htmlget);
$nodelist = $xpath->query( "//img/@src" );

foreach ($nodelist as $images){
    $value = $images->nodeValue;

    echo "<img src='".$value."' /><br />";
}
?>

但这是从我的网站获取所有图像,而不仅仅是特定的div。它还会打印出我的RSS图片,Social icon图片等,

我可以在php代码中指定特定div,以便它只从div.posts类中获取图像。

3 个答案:

答案 0 :(得分:0)

使用PHP Simple HTML Parser,这将是:

include('simple_html_dom.php');
$html=file_get_html("http://your_web_site.com");
foreach($html->find('div.posts img') as $img_posts){
    echo $img_posts->src.<br>; // to show the source attribute
}

还在阅读PHP Simple HTML Dom解析器。到目前为止,它比正则表达式更快(在实现中)。

答案 1 :(得分:0)

首先为外部div容器提供“id”。然后通过它的id得到它。然后获取其子图像节点。

一个例子:

$tables = $dom->getElementsById('node_id');

$table = $tables->item(1);

//get the number of rows in the 2nd table
echo $table->childNodes->length; 

//content of each child
foreach($table->childNodes as $child)
{
echo $child->ownerDocument->saveHTML($child);
}

这可能会对你有所帮助。它有一个很好的教程。     http://www.binarytides.com/php-tutorial-parsing-html-with-domdocument/

答案 2 :(得分:0)

这是另一个可能有用的代码。您正在寻找

doc->getElementsByTagName

可以帮助直接定位标签。

<?php
$myhtml = <<<EOF
<html>
<body>
<div class="posts">
    <div class="separator">
        <img src="http://www.example.com/image.jpg" />
        <p>Be, where I am today, and i will be one where you will search me tomorrow</p>
    </div>
    <div class="separator">
        <img src="http://www.example.com/imagesda.jpg" />
        <p>Be, where I am today, and i will be one where you will search me tomorrow</p>
    </div>
.... few more images
</div>
</body>
EOF;

$doc = new DOMDocument();
$doc->loadHTML($myhtml);

$divs = $doc->getElementsByTagName('img');
foreach ($divs as $div) {
    foreach ($div->attributes as $attr) {
      $name = $attr->nodeName;
      $value = $attr->nodeValue;
     echo "Attribute '$name' :: '$value'<br />";
    }
}
?>

在这里演示http://codepad.org/keZkC377

此处的答案还可以提供进一步的见解 Not finding elements using getElementsByTagName() using DomDocument