1

次のコードがあります。

var request = require('request');
var cheerio = require('cheerio');
var URL = require('url')
var fs = require('fs')
fs.readFile("urls.txt", 'utf8', function(err, data) {
    if (err) throw err;
    var urls = data.split('\n');
    urls = urls.filter(function(n){return n});
    for(var i in urls) {
        request(urls[i], function(err, resp, body) {
            if (err)
                throw err;
            $ = cheerio.load(body,{lowerCaseTags: true, xmlMode: true});
            $('item').each(function(){
                console.log("----------");
                console.log($(this).find('title').text());
                console.log($(this).find('link').text());
                console.log($(this).find('pubDate').text());
            });
        }).end();
    }
});

urls.txt ファイルからは、次の URL しかありません。

http://www.visir.is/section/?Template=rss&mime=xml

そのURLでwgetを使用すると、RSSフィードのように見える応答が返されますが、本文の上のコードでそれを行うと空です。誰かが私に理由とこれを修正する方法を説明できますか?

4

1 に答える 1

2

更新:.end()元のスクリプトから削除するだけで機能します。end()コールバックでスクリプトを終了します。IMO、2016年には間違いなくニードルよりもリクエストを選びます。


Requestは奇妙な鳥であり、あなたの場合に機能しない理由は、応答にまったく情報を与えていません。

Needle代わりに試してください:

var needle = require('needle');
var cheerio = require('cheerio');
var URL = require('url')
var fs = require('fs')
fs.readFile("urls.txt", 'utf8', function(err, data) {
    if (err) throw err;
    var urls = data.split('\n');
    urls = urls.filter(function(n){return n});
    for(var i in urls) {
        needle.get(urls[i], function(err, resp, body) {
            if (err)
                throw err;
            $ = cheerio.load(body,{lowerCaseTags: true, xmlMode: true});
            $('item').each(function(){
                console.log("----------");
                console.log($(this).find('title').text());
                console.log($(this).find('link').text());
                console.log($(this).find('pubDate').text());
            });
        });
    }
});
于 2013-12-08T22:13:25.390 に答える