如何使用PHP DOM模块解析HTML文件?

时间:2014-12-24 14:12:54

标签: php dom html-parsing simple-html-dom

我有以下html文件

<body>
<div class="container">
    <div class="list">
        <ul>
            <li>
                <a href="http://website1.com" ><img src="image1.jpg"></a>
            </li>
            <li>
                <a href="http://website2.com" ><img src="image2.jpg"></a>
            </li>
            <li>
                <a href="http://website3.com" ><img src="image3.jpg"></a>
            </li>
            ....
            ....
            ....
        </ul>
    </div>
</div>
</body>

通过解析上面的html文件。我想要这样的输出..

 http://website1.com
 image1.jpg
 http://website2.com
 image2.jpg
 http://website3.com
 image3.jpg
 ....
 ....

通过查看上面的输出,您可以猜测我只需要每个列表项的'href'和'src'值。

我试图使用'simple_html_dom'第三方插件解析。

<?php
  include_once('simple_html_dom.php');
  $html = new simple_html_dom();
  $html->load_file("html_file.html");
  foreach($html->find('div[class=list] ul li') as $li)
   {
     echo $li->find('a')->href."<br />";
     echo $li->find('img')->src."<br />";
   }
 ?>

但上面的代码不起作用。请告诉我,如果我做错了,或者如果你知道的话,使用可以帮助我使用PHP DOM模块。

2 个答案:

答案 0 :(得分:1)

为什么不搜索div[class=list] ul li,而不是找.list li的?简单HTML DOM的Documentation非常缺乏,所以你需要自己付钱,但这应该有效:

foreach($html->find('.list ul li') as $li)

如果仍然不起作用,我print_r($html->find('.list ul il'),看看它产生了什么,如果这是一个空数组,只需切断选择器,直到找到问题的根源(即print_r($html->find('.li ul')等)

答案 1 :(得分:0)

<?php include_once('simple_html_dom.php'); $html = new simple_html_dom(); $html->load_file("html_file.html"); foreach($html->find('div.list a') as $a) { echo $a->href."<br />"; echo $a->children(0)->src."<br />"; } ?>