【发布时间】:2013-12-08 21:49:57
【问题描述】:
我有以下代码:
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 文件中我只有以下网址:
http://www.visir.is/section/?Template=rss&mime=xml
当我在那个 url 上使用 wget 时,我得到一个看起来像 rss 提要的响应,但是当我在上面的代码中这样做时,正文是空的。有人可以向我解释为什么以及如何解决这个问题吗?
【问题讨论】:
-
.end()是多余的,你能把它去掉检查一下吗? -
另外,请求操作是异步的,您的 for 循环可能无法按预期工作。使用async 模块以串联/并行方式加载适合的url。
标签: node.js request web-scraping cheerio