【问题标题】:Unable to read RSS feed using node htmlparser无法使用节点 htmlparser 读取 RSS 提要
【发布时间】:2017-09-25 13:36:47
【问题描述】:

我正在尝试使用以下代码阅读 slashdot RSS 提要:

var htmlparser = require("htmlparser");
var sys = require("sys");
var handler = new htmlparser.RssHandler(function (error, dom) {
    if(error) throw error;
    console.log(dom);
});
var parser = new htmlparser.Parser(handler);
parser.parseComplete("http://rss.slashdot.org/Slashdot/slashdotMain");
console.log(handler.dom);
sys.puts(sys.inspect(handler.dom, false, null));

它总是返回以下内容,而不是返回提要数组:

[ { data: 'http://rss.slashdot.org/Slashdot/slashdotMain',
    type: 'text' } ]

有什么问题?我的代码有问题吗?谢谢

【问题讨论】:

    标签: node.js rss html-parsing html-parser


    【解决方案1】:

    看来,根据htmlparser 的文档,您必须将 RSS 提要的原始 html 代码传递给 parseComplete 函数,因此,在解析网页之前,使用请求模块获取该网页的源代码并,然后,尝试使用 htmlparser 模块解析数据。
    您的代码应如下所示:

    var request = require("request");
    var htmlparser = require("htmlparser");
    var sys = require("sys");
    var handler = new htmlparser.RssHandler(function (error, dom) {
        if(error) throw error;
        console.log(dom);
    });
    var parser = new htmlparser.Parser(handler);
    
    request({
      uri: "http://rss.slashdot.org/Slashdot/slashdotMain",
    }, function(error, response, body) {
       parser.parseComplete(body);
       console.log(handler.dom);
       sys.puts(sys.inspect(handler.dom, false, null));
    });
    

    【讨论】:

    • 文档没有在任何地方提到request() 方法,那么你从哪里得到它?
    • 我认为应该使用 Request 模块,因为在文档中,它将原始 html 代码传递给 parse 函数。 Request 模块已经包含在您的 nodejs 配置中(doc),它允许您获取网页的源代码。从技术上讲,如果源代码在内存中,您可以使用文档中报告的parse 函数。
    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多