Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 结构并从表中选择数据_Javascript_Node.js_Selector_Cheerio - Fatal编程技术网

Javascript 结构并从表中选择数据

Javascript 结构并从表中选择数据,javascript,node.js,selector,cheerio,Javascript,Node.js,Selector,Cheerio,我正在使用ChereIOJS从我正在开发数据采集器的页面中选择元素,但是我在使用这个动态表时遇到了困难 这是一个独立于整个页面的代码 const fs = require("fs"); const cheerio = require("cheerio"); (async () => { const page = fs.readFileSync("table.html", "utf8"); const $ = cheerio.load(page); const info = $

我正在使用ChereIOJS从我正在开发数据采集器的页面中选择元素,但是我在使用这个动态表时遇到了困难

这是一个独立于整个页面的代码

const fs = require("fs");
const cheerio = require("cheerio");

(async () => {
  const page = fs.readFileSync("table.html", "utf8");
  const $ = cheerio.load(page);
  const info = $("table tbody");

  info.each(function(i, element) {
    const text = $(this).html();
    console.log(text, "*----*");
    // console.dir(page, { depth: null });
  });
})();

我给你举了这个例子来改进。 它显示表内信息的打印。 在循环中,迭代每个TH和TD并返回值

这个脚本可以通过重构来改进

链接在线回复:


你的问题是什么?我想把tbody数据转换成json,但我只找到了tbody列表部分,我不知道如何构造和选择它们的信息,因为表是动态的。我们也不知道表的结构。如果没有关于输入外观和输出外观的更多信息,任何人都无能为力。解决方案已与项目合并,谢谢Lucas Ferreira。
const fs = require("fs");
const cheerio = require("cheerio");

(async () => {
  const page = fs.readFileSync("table.html", "utf8");
  const $ = cheerio.load(page);
  const info = $("table tbody");

  info.each(function(i, element) {
    console.log("###################################\n")
    extractTR(this, i)
    console.log("___________________________________\n")
  });

  function extractTR(el, i) {
    let childrens = $(el).children()
    childrens.each(function(t, item){
      if(item.children && item.children.length > 0) {
        console.log(extractText(item, t))
      }
    });
  }

  function extractText(el, i) {
    let data = $(el).children(),
        text = [],
        type = [],
        result

    data.each(function(t, elm){
      text[t] = $(elm).text().trim()
      type[t] = $(elm).prop('tagName')
    });

    let [text_1, text_2] = text
    let [first, second] = type

    return result = first == "TD" && second == "TD" ? `${text_1}\n${text_2}` : `${text_1} ${text_2}`
  }
})();