【发布时间】:2017-08-10 05:53:25
【问题描述】:
我的最终目标是让我的应用显示来自给定用户的 500px.com 帐户(这是一个摄影网站)的 X 个最新图像的缩略图。据我所知,该网站没有 API,但它确实有一个供个人用户使用的 rss 提要,即https://500px.com/janedoe/rss,它会输出 xml。
使用 xml2js,我可以将 xml 解析为 js 对象并导航到包含我想要的 url 的 html 的“描述”容器,就像这样(这只是使用第一项的概念证明RSS提要):
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 中的内容,以便我可以将 url 作为要在页面上呈现的字符串传递。
我可以设想使用字符串方法来查找第一个“img src”标签,然后一直读到地址的末尾,但是有没有更优雅和简单的方法来做到这一点?
【问题讨论】:
-
没什么大不了的,真的。使用 XML 解析器解析 RSS 并导航到有问题的元素以提取 HTML 文本。使用 HTML 解析器解析 HTML 并导航到相关元素以提取属性值。您绝对应该不做的一件事是“使用字符串方法”。
-
既然您已经完成了第 1 步(RSS 解析),剩下的就是第 2 步(HTML 解析)。看看cheerio(基本上是 jQuery for node)来帮助你。
-
谢谢!使用cheerio 效果很好。
标签: node.js xml express web-scraping