首页 > 解决方案 > 如何使用 Cheerio 将抓取的数据转换为 JSON 对象

问题描述

这是我的代码:

let request = require('request');
let cheerio = require('cheerio');

let url = "https://www1.nseindia.com/marketinfo/companyTracker/compInfo.jsp?symbol=INFY&series=EQ"
request(url, function(error, response, html){
    if (!error && response.statusCode == 200) {
        let $ = cheerio.load(html);
        tabCon = $('td').text(),
        console.log(tabCon);
    }
})

我在控制台上得到这样的输出:

Infosys Limited 上市日期 (NSE) : 08-Feb-1995 面值 : 5.00ISIN : INE009A01021行业 : 计算机 - 软件 成分指数 : ,NIFTY 500,NIFTY IT,NIFTY 50,NIFTY 100,NIFTY 200,NIFTY SERVICES SECTORIssued Cap. : 4258456678(股)截至 2019 年 11 月 25 日自由流通市值。: 253866.09(Cr) 影响成本: 0.01 截至 201952 年 11 月当周高/低价格: 847.00/599.85 自由流通市值截至前一个交易日。

我想将此数据放入此结构中的 JSON(而不是文件)中:

{
"Date of Listing (NSE)": "08-Feb-1995",
"Face Value": "5.00",
"ISIN": "INE009A01021".......and so on
}

标签: javascriptjquerynode.jsjsoncheerio

解决方案


您可以使用该.filter()方法排除所有td没有:(键值对指示符)的元素,然后初始化对象变量,遍历结果元素以构建对象,如下所示:

....
request(url, function(error, response, html){
  if (!error && response.statusCode == 200) {
    let $ = cheerio.load(html);
    let tabCon = {};
    $('td').filter(function() { 
        return $(this).text().indexOf(':') > -1; 
    }).each(function() {
        let kvPair = $(this).text().split(':');
        tabCon[kvPair[0].trim()] = kvPair[1].trim();
    });
    console.log(tabCon);
  }
});

推荐阅读