目標
在node.js下使用cheerio以及request來讀取蘋果日報的RSS資訊
在http://www.appledaily.com.tw/rss這裡可以看到有提供的的即時新聞群組列表
而這次實作的目的就在於取得群組列表以及將指定列表中的資訊抓下來
實作
先使用Firebug確認要取得的條件後
經由以下的cheerio程式碼,就可以取得新聞總覽的所有列表以及其href連結資訊
apple.getRssList = function(req, res) {
var rssList = [];
request({
uri: appleURL + '/rss',
headers: {
'User-Agent': 'Mozilla/5.0'
}
},
function(error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('.each_level .inst_all li a').each(function(i, element) {
rssList.push({
category: $(this).text(),
link: $(this).attr("href")
});
});
res.json(rssList);
} else {
res.statusCode = 404;
res.json({
status: 'error',
message: 'fail to request'
});
}
});
};
然後,這裡的程式碼則可以根據所給訂的href連結取得RSS內的資訊
本來是想用cheerio來取得RSS中xml的資料,但試不出來,找了些資料發現可能跟CDATA這tag有關
嚐試了一陣子後,最後發現htmlparser2可以正確的讀取xml的資料,就改成使用htmlparser2來存取
apple.getTitleList = function(req, res) {
request({
uri: appleURL + rssLink,
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, html) {
if (!error && response.statusCode == 200) {
var titleList = [];
var title;
var handler = new htmlparser.FeedHandler(function(error, feed) {
if (error)
console.log(err)
else {
console.log(feed.title);
console.log("There are " + feed.items.length + " items");
for (var i = 0; i < feed.items.length; i++) {
console.log(i + " " + feed.items[i].title);
titleList.push({
title: feed.items[i].title
});
}
title = feed.title;
}
res.json({
rssTitle: title,
titleList: titleList
});
});
var parser = new htmlparser.Parser(handler, {
decodeEntities: true,
xmlMode: true
});
parser.write(html);
parser.end();
} else {
res.json({
status: 'error',
message: 'fail to request'
});
}
});
}
文章標籤
全站熱搜
