Web Scrape с кукловодом внутри стола - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь почистить эту страницу.

https://www.psacard.com/Pop/GetItemTable?headingID=172510&categoryID=20019&isPSADNA=false&pf=0&_=1583525404214

Я хочу найти количество оценок для PSA 9 и 10. Если мы посмотрите на HTML страницы, вы заметите, что PSA очень плохо справляется с отображением данных. Каждый ТР - игрок. И первый ТД - это номер карты. Скажем так, я хочу получить Карту № 1, в данном случае Кевина Гарнетта.

Всего четыре карты, так что это только четыре карты, которые я хочу показать.

Вот код, который у меня есть.

const puppeteer = require('puppeteer');


(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto("https://www.psacard.com/Pop/GetItemTable?headingID=172510&categoryID=20019&isPSADNA=false&pf=0&_=1583525404214");

  const tr = await page.evaluate(() => {
    const tds = Array.from(document.querySelectorAll('table tr'))
    return tds.map(td => td.innerHTML)
  });


    const getName = tr.map(name => {
        //const thename = Array.from(name.querySelectorAll('td.card-num'))
        console.log("\n\n"+name+"\n\n");
    })


  await browser.close();
})();

Я напечатаю каждый TR, но я не могу погрузиться в эти TR. Вы можете видеть, что я закомментировал строку, я пытался сделать это, но получил ошибку. На данный момент, я не получаю это от игрока динамически ... Самый простой способ, которым я мог бы подумать, - это создать функцию, которая бы думала о получении указанной карты c, и делала бы что-то, где выберите TR -> TD.card-num == 1 для Кевина.

Любая помощь с этим была бы удивительной.

Спасибо

1 Ответ

0 голосов
/ 11 марта 2020

Краткий ответ: Вы можете просто скопировать и вставить это в Excel, и оно отлично вставляется.

Длинный ответ: Если я правильно понимаю, вам нужно отобразить все элементы td, а затем в каждом td отобразить каждый tr. Я использую Cheerio в качестве помощника. Чтобы завершить это с кукловодом, просто выполните: html = await page.content() и затем передайте html в уборщик, который я написал ниже:

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

const test  = (html) => {
//   const data = fs.readFileSync("./test.html");
//   const html = data.toString();
  const $ = cheerio.load(html);
  const array = $("tr").map((index, element)=> {
      const card_num = $(element).find(".card-num").text().trim()
      const player = $(element).find("strong").text()
      const mini_array = $(element).find("td").map((ind, elem)=> {
          const hello = $(elem).find("span").text().trim()
          return hello
      })
      return {
          card_num,
          player,
          column_nine: mini_array[13],
          column_ten: mini_array[14],
          total:mini_array[15]
      }
  })
  console.log(array[2])
}

test()

Приведенный выше код выведет следующее:

{
  card_num: '1',
  player: 'Kevin Garnett',
  column_nine: '1-0',
  column_ten: '0--',
  total: '100'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...