Структурировать и выбирать данные из таблицы - PullRequest
0 голосов
/ 04 октября 2019

Я использую cheeriojs для выбора элементов на страницах, на которых я разрабатываю сборщик данных, однако у меня возникают трудности с этой динамической таблицей,

Это среда с таблица код, выделенный из полной страницы.

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 });
  });
})();

1 Ответ

0 голосов
/ 05 октября 2019

Я сделал этот пример для вас, чтобы улучшить. Он показывает распечатку информации внутри таблицы. Внутри цикла, повторяя каждый TH и TD и возвращая значение

Этот сценарий можно улучшить с помощью рефакторинга.

Ссылка онлайн-ответ: https://repl.it/@lucasferreirali/ExampleHelp

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}`
  }
})();
...