0

我已经尝试了几种不同的方法,但似乎没有任何效果。(我尝试了如何使用简单 HTML DOM 模仿子选择器的所有示例?)按原样使用代码,更改我需要的内容,即 class=xxx 和 url。

所以我正在尝试从网页中提取一些信息。就 DOM 而言,没有孩子可以使用,并且使用 xpath 方法没有得到任何回报。我猜我做错了什么。

<div id="wpp-6" class="widget popular-posts">
    <div class="widget_title">POPULAR</div><!-- Wordpress Popular Posts Plugin v2.3.2         [Widget] [daily] [regular] -->
    <ul>
        <li>
            <a href="http://link.html" title="Title of post" class="wpp-post-title">THE DATA I    WANT</a> <span class="post-stats"></span>
        </li>
        <!-- More lists -->
    </ul>
</div>

之后还有大约 9 个列表语句。有什么建议么?

4

2 回答 2

2

使用PHP Simple HTML DOM Parser你可以很容易地做到这一点,只需从这里simple_html_dom.php下载文件并按如下方式使用它。

include('simple_html_dom.php');
$html=file_get_html('http://psfk.com');
foreach($html->find('div#wpp-6 ul li a') as $a){
    echo $a->innertext.'<br />';
}

输出将是(2013 年 1 月 14 日星期一测试)

谷歌流感地图描绘了美国最严重的疫情

透明胶带肖像扭曲人脸 [图片]

奥威尔十九八十四集中审查主题新设计

用裸酒过滤酒制成的伏特加 [视频]

三星首次推出柔性屏幕

麦当劳在澳大利亚更名

三星的透明屏幕是未来的零售窗口 [CES]

Dita Von Teese 将二维码直接缝到她的衣服上

Abercrombie & Fitch Boss 让空乘人员在私人飞机上只穿平角裤和凉鞋

镜子应用程序向女性展示如果继续饮酒,她们将如何变老

如果你想用linklike打印标题,<a>...</a>那么只需使用echo $a

于 2013-01-13T22:42:27.363 回答
0

自从我使用 xpath 已经有一段时间了,所以这是我的解决方案您可以通过这种方式遍历 DOM 树,检查所需元素的 id 和类

<?php
    error_reporting(0); //needed because of invalid xml




    $url = "http://www.psfk.com";

    $xml = new DOMDocument("1.0", 'UTF-8'); 
    $str = file_get_contents($url);


    // Load the url's contents into the DOM 
    $xml->loadHTML($str); 



    //Loop through all divs in the dom until we find what we need 
    foreach($xml->getElementsByTagName('div') as $div) {
        if($div->getAttribute('id') == 'wpp-6' && $div->getAttribute('class') == 'widget popular-posts') {
            if($div->parentNode->getAttribute('id') == 'right') {
                foreach($div->getElementsByTagName('li') as $li) {
                    foreach($li->getElementsByTagName('a') as $link) {
                        echo $link->textContent . "<br>";;
                    }
                }
            }
        }


    }

?>
于 2013-01-13T22:42:57.723 回答