0

我下面的代码从网站的搜索结果中检索一系列图像以及相应的age数据。它工作正常,但是我得到一个图像列表,然后是该age字段中的信息列表。

img img img img age age age age等等。

我如何组合这些以便我可以成组显示它们:img age img age img age

<?php
    error_reporting(-1);

    $html = new DOMDocument();
    @$html->loadHtmlFile('http://www.site.com/searchresults.html');
    $xpath = new DOMXPath( $html );
    $nodelist = $xpath->query( "//div[@class='age']" );

    $tags = $html->getElementsByTagName('img');

    foreach ($tags as $tag) {

            $image =  $tag->getAttribute('src');
            echo '<img src='. $image .' alt="image" ><br>';
    }


    foreach ($nodelist as $n)
    {
        echo $n->nodeValue."<br>";
    }

?>

示例页面,我想从中提取imgtitle数据<div class="age" title="30 usa">

<div id="sr-15763292" class="search-result">
    <div class="thumb-wrapper">
      <a class="bioLink" href="http://www.site.com/user/"  title="View user"><img src="http://www.site.com/img/15763292.jpg" class="thumb" alt="user" width="140" height="105"></a>

      <p class="status"><a href="http://www.site.com/user/" >Online</a></p>
    </div>

    <div class="rating">
      <div class="rating-stars rating4"></div>
    </div>

    <div class="age" title="30 usa">
     <p>30</p>
     <p class="gender m">m</p>
     <p>USA</p>
    </div>

    <div>
        <p class="headline">Hello there.</p>
    </div>
</div>
4

1 回答 1

0

如果我们不知道 HTML 是什么样子,就很难回答!假设它看起来像这样

<div class="age"><p>21</p>
    <img src="a.jpg" />
</div>
<div class="age"><p>51</p>
    <img src="b.jpg" />
</div>

您需要找到每个 div,然后在每个 div 中找到图像。即使只有一个结果,getElementsByTagName() 也会为您提供一个列表,因此请使用 item() 获取第一个结果。

error_reporting(-1);

$html = new DOMDocument();
@$html->loadHtmlFile('results.html');
$xpath = new DOMXPath( $html );
$nodelist = $xpath->query( "//div[@class='age']" );

foreach ($nodelist as $node) {
    $tags = $node->getElementsByTagName('img');
    $image =  $tags->item(0)->getAttribute('src');
    echo '<img src="'. $image .'" alt="image" ><br>';
    echo $node->textContent . '<br>';
}

如果 HTML 是这样的

<div class="age"><p>21</p></div><img src="a.jpg" />

你可以试试

 $node->nextSibling()

作为通过 HTML 的一般点跟踪,并思考如何从 A 到 B?往前走?向后?到父节点,到下一个节点,然后再次下降......?

于 2013-04-25T03:14:12.243 回答