web-dev-qa-db-ja.com

puppeteer.jsを使用してテーブルをスクレイピングしたい。すべての行を取得し、行を反復処理し、各行の「td」を取得するにはどうすればよいですか

操り人形jsのセットアップがあり、すべての行を使用して取得できました

let rows = await page.$$eval('#myTable tr', row => row);

次に、各行で「td」を取得し、それらから内部テキストを取得するようにします。

基本的に私はこれをやりたい:

var tds = myRow.querySelectorAll("td");

ここで、myRowはpuppeteer.jsを含むテーブル行です

7
user838426

これを実現する1つの方法は、最初にすべてのTD'sは、各TDのtextContentを返します

const puppeteer = require('puppeteer');

const html = `
<html>
    <body>
      <table>
      <tr><td>One</td><td>Two</td></tr>
      <tr><td>Three</td><td>Four</td></tr>
      </table>
    </body>
</html>`;

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(`data:text/html,${html}`);

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

  //You will now have an array of strings
  //[ 'One', 'Two', 'Three', 'Four' ]
  console.log(data);
  //One
  console.log(data[0]);
  await browser.close();
})();

次のようなものも使用できます。

const data = await page.$$eval('table tr td', tds => tds.map((td) => {
  return td.innerHTML;
}));

//[ 'One', 'Two', 'Three', 'Four' ]
console.log(data);
16
Rippo