php只在body标签内获取图片

时间:2012-08-02 17:12:10

标签: php parsing loops tags

我需要做相同的事情:

$tags2 = $doc->getElementsByTagName('img');
$mybody = $doc->getElementsByTagName('body');
//if there's a body tag
foreach ($mybody as $bod){
            //loop through each img element
        foreach ($tags2 as $tag) {   
           echo  '<img src=' . $tag->getAttribute('src') . '/>';
           echo  "<br/>" . $tag->getAttribute('href') ; 
        }
}

以下是上下文:

$str = file_get_contents('http://somewebsite.html');


$doc = new DOMDocument();
@$doc->loadHTML('<?xml encoding="UTF-8">' . $str);


$tidy = new tidy();
$tidy->parseFile($str);
$tidy->cleanRepair();

if(!empty($tidy->errorBuffer)) {
        echo "The following errors or warnings occured:\n";
        echo $tidy->errorBuffer;
}
else {
    $str = $tidy;
}

$tags2 = $doc->getElementsByTagName('img');
$mybody = $doc->getElementsByTagName('body');
foreach ($mybody as $bod){
        foreach ($tags2 as $tag) {   
           echo  '<img src=' . $tag->getAttribute('src') . '/>';
           echo  "<br/>" . $tag->getAttribute('href') ; 
        }
}

^输出页面上,标题中,侧边栏等上的所有图像以及正文中的图像。我只想要身体中的图像。我尝试了一些我在这里使用递归看到的其他例子,但是他们得到了样式或段落标签,我无法让它们正确地检索图像标签和图像src属性。

一旦我有身体标签,我怎么能为身体内的任何图像做内环?

谢谢。

1 个答案:

答案 0 :(得分:1)

你只需要反转两行并重写一个smidgen。

$mybody = $doc->getElementsByTagName('body')->item(0);
$tags2 = $mybody->getElementsByTagName('img');

原因是Body标签实际上是该类的DOMElement实例,并且能够对getElementsByTagName执行相同的调用。