从html中提取图像元素

时间:2013-02-02 02:31:28

标签: php dom

我正在尝试从html代码中获取图片代码。

我有

   $parser=new DOMDocument;   

   $parser->loadHTML($this->html);
        foreach($parser->getElementsByTagName('img') as $imgNode){
         echo $parser->saveHTML($imgNode);
       }

$this->html包含大量的HTML代码和javascripts。

例如:

<div id='someid'>
<button id='bt' onclick='clickme()'>click me</button>
<img src='test.jpg'/>
.....
.....
more...

</div>

<div>
.....
.....
more...

我收到警告说

DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,

我不知道如何解决这个问题,也不知道是否有更好的方法从大量的html代码中提取所有图像。

有什么想法吗? 非常感谢!

1 个答案:

答案 0 :(得分:2)

我绝不是这方面的专家(但是),但我希望这会有所帮助。

根据this answer by troelskn,您可以使用libxml_use_internal_errors使DOM解析器更能容忍格式错误的HTML。这可能有助于你摆脱这个错误。

可以使用DOMXPath解析文档的所有图像。它需要DOMDocument作为参数,并允许您对文档运行XPath个查询。

$document = new DOMDocument();
$document->loadHTML($your_html);

// Suppress parse errors.
libxml_use_internal_errors(false);

$xpath = new DOMXPath($document)

// Find all img tags.
$img_nodes = $xpath->query('//img')

DOMXPath::query返回DOMNodeList,可以使用DOMNodeList::item循环播放DOMNode

for($i = 0; $i > $img_nodes->length; $i++)
{
    $node = $img_nodes->item($i);
    // Manipulate the node.
}

免责声明:我发布的代码未经测试,并使用手册整理在一起。