我的最终目标是让我的应用程序显示来自给定用户的500px.com帐户(这是一个摄影网站)的X最新图像的缩略图。就我所知,该网站没有API,但它确实有针对个人用户的rss订阅源,即https://500px.com/janedoe/rss,它会吐出xml。如何在Node.js中从xml中获取url?
使用xml2js,我可以将xml解析为一个js对象,然后导航到具有包含我想要的url的html的“description”容器,就像这样(这只是使用第一个项目的概念证明rss feed):
var express = require('express');
var router = express.Router();
var request = require('request');
var parseString = require('xml2js').parseString;
var EventEmitter = require('events').EventEmitter;
var body = new EventEmitter();
/* GET home page. */
router.get('/', function(req, res, next) {
request("https://500px.com/janedoe/rss", function(error, response, data) {
body.data = data;
body.emit('update');
});
body.on('update', function() {
parseString(body.data, function (err, result) {
var photoLink = result.rss.channel[0].item[0].description[0];
res.render('index', { title: 'Express', photoName});
});
});
});
这会将“!CDATA”标记的整个html内容放入photoLink变量中。我想要做的是定位该html内的img src
中的内容,以便我可以将网址作为字符串传递给页面。
我可以设想用字符串的方法来寻找第一个“IMG SRC”标签,然后读取直到地址结束,但是否有更优雅,更简便的方法来做到这一点?
没什么大不了的,真的。使用XML解析器解析RSS并导航到有问题的元素以提取HTML文本。使用HTML解析器解析HTML并导航到所涉及的元素以提取属性值。你绝对不应该做的一件事是“使用字符串方法”。 – Tomalak
由于您已经完成了第1步(RSS解析),所有剩下的就是第2步(HTML解析)。看看[cheerio](https://github.com/cheeriojs/cheerio)(基本上是jQuery for node)来帮助你。 – Tomalak
谢谢!使用cheerio工作得很好。 – testingtesting