在nodejs中截取网页的动态数据

时间:2017-09-04 11:20:37

标签: node.js web-scraping

通过使用node.js我试图抓取一个网页。为此,我使用cheerio和tinyreq模块。我的源代码如下:

// scrape function
function scrape(url, data, cb) {
    req(url, (err, body) => {
        if (err) { return cb(err); }
        let $ = cheerio.load(body)
          , pageData = {};
        Object.keys(data).forEach(k => {
            pageData[k] = $(data[k]).text();
        });
        cb(null, pageData);
    });
}
scrape("https://www.activecubs.com/activity-wheel/", {
     title: ".row h1"
   , description: ".row h2"
}, (err, data) => {
    console.log(err || data);
});

在我的代码中,h1标签中的文本是静态的,而在h2标签中,它是动态的。当我运行代码时,我只获取静态数据,即描述字段数据为空。通过以前的StackOverflow问题,我尝试使用幻像j来克服这个问题,但它对我不起作用。这里的动态数据是通过旋转车轮获得的数据。对于我正在使用的网站上的任何疑问,您可以查看https://www.activecubs.com/activity-wheel/

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

可以使用SpookyJS

执行用户操作

SpookyJS可以从Node.js驱动CasperJS套件。在高层次上,Spooky通过将Casper作为子进程生成并通过RPC控制它来实现这一目标。 具体来说,每个Spooky实例都会生成一个运行引导脚本的子Casper进程。引导脚本设置JSON-RPC服务器,该服务器通过传输(HTTP或stdio)侦听来自父Spooky实例的命令。该脚本还设置了一个JSON-RPC客户端,该客户端通过stdout将事件发送到父Spooky实例。查看documentation

Example