使用简单的HTML dom解析rss feed并不适用于所有元素

时间:2014-05-24 14:52:22

标签: php html rss

我正在尝试从此RSS Feed http://www.autoexpress.co.uk/car-news/feed/获取每个项目的标题,说明,链接,图片和日期。但是不明白为什么,链接标签和图像标签的src是不可能获得的,其余的工作正常。这就是我试过的:

<?php
    include "testing3/lib/simple_html_dom.php";
    $url = 'http://www.autoexpress.co.uk/car-news/feed';
    $rss= file_get_html($url);
    $items = $rss->find('item');
    foreach ($items as $article) {
        $title[] = $article->find('title',0)->plaintext;
        $description[] = $article->find('description',0)->plaintext;
        $link[] = $article->find('link', 0)->plaintext;
        $image[] = $article->find('img', 0);
        $date[] = $article->find('pubDate', 0)->plaintext;
    }
    echo 'Title is '.$title[0].'<br>';
    echo 'Description is '.strip_tags(html_entity_decode($description[0])).'<br>';
    echo 'Link is '.$link[1].'<br>';
    echo 'Date is '.$date[1].'<br>';
    echo 'Image Source is '.$image[1];
?>

这是输出 标题是Fiat Panda 4x4 Antarctica评论 - 图片 说明是图片查看全部8张图片24五月,2014 链接是 日期是2014年5月23日星期五16:29:39 +0000 图像来源

var_dump($link);我得到一个空字符串数组:

array(40) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" etc

var_dump($image)同样的事情就是有NULL值。我错了什么?

2 个答案:

答案 0 :(得分:2)

你根本无法解析&#34;链接&#34;标签与PHP简单的HTML DOM解析器原因不明。我也使用了这个库,它从未解析过这些元素。您可以使用&lt;创建一个简单的HTML文件。链接&gt;元素,他们不会被解析。但是,如果将其更改为&lt; link2&gt; (或类似),解析器将立即开始工作。我想那就是&#34;链接&#34;是&#34;保留&#34;这个解析器中的单词,或者什么。

答案 1 :(得分:1)

直接蝙蝠,这是一个非常令人讨厌的RSS提要。我的猜测是你的图书馆不能处理嵌套/转义的RSS标签。由于没有人在40多分钟内回复你,这就是沼泽标准方法:

            $rssfeed = simplexml_load_file('http://www.autoexpress.co.uk/car-news/feed');
            foreach ($rssfeed->channel as $channel) {

                echo '<ul>';
                foreach ($channel->item as $item) {
                    echo '<li><a href="' . htmlentities($item->link) . '"</a>';
                    echo htmlentities($item->title);
                    echo htmlentities($item->description);
                    echo htmlentities($item->img);
                    echo htmlentities($item->pubDate);
                    echo '</li>';
                }
                echo '</ul>';
            }

是的,甚至没有使用您在摘录顶部引用的库,但是它会抓取所需的代码,包括转义的img标签,即使之后需要进行一些严肃的清理。

实际上我认为这个脚本在img标签中失败了,但那是因为转义的img标签嵌套在描述中。