2

我有网站,我在特定 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类中获取图像。

4

3 回答 3

1

首先为外部 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/

于 2013-10-07T19:28:44.237 回答
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 解析器。到目前为止,它比正则表达式更快(在实现中)。

于 2013-10-07T19:25:10.887 回答
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 find elements using getElementsByTagName() using DomDocument

于 2013-10-07T19:41:34.580 回答