【问题标题】:Create JSON from two different class selectors?从两个不同的类选择器创建 JSON?
【发布时间】:2019-03-02 23:06:04
【问题描述】:

我的示例代码如下:

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

url = 'example.com';

request(url, function(error, response, html){
 if(!error){
  var $ = cheerio.load(html);
  var json = { name : "", number : ""};

  let name = [];
    $('.name-cell').map(function(i, elm) {
    name[i] = $(this).text().trim();
    json.name = name;
  })

  let rank = [];
    $('.number-cell').map(function(i, elm) {
    number[i] = $(this).text().trim();
    json.number = number;
  })

  var obj = name.concat(number);
  console.log(obj);
}

})

输出:

{ "name": [
    "Name 1",
    "Name n"
    ],
  "number": [
    "Number 1",
    "Number n"
    ] }

想要的输出(或类似的东西):

{ ["name": "Name 1", "number": "Number 1"] }

非常感谢任何建议或指导 - 因为我无法从两个不同的类选择器中抓取数据。

【问题讨论】:

    标签: javascript jquery node.js web-scraping cheerio


    【解决方案1】:

    您的“所需输出”不是有效的 JavaScript。看来你想要的是一个对象数组:

    [ // An array!
      { "name": "Name 1", "number": "Number 1" }, // An object!
      ... 
    ]
    

    以下代码使用.eq 和迭代索引来选择对应的'.number-cell' 元素。 obj 应该是一个对象数组。

    var $ = cheerio.load(html);
    var names = $('.name-cell'), cells = $('.number-cell');
    
    var obj = names.map(function(i) {
      return {
         name: $(this).text().trim(),
         number: cells.eq(i).text().trim()
      }
    });
    
    console.log(obj);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多