使用Puppeteer从表格TD中抓取段落内部文本和图像标题

use puppeteer to scrape paragraph inner text and image title from table td

提问人:Gacha SS 提问时间:11/15/2023 最后编辑:YaroslavmGacha SS 更新时间:11/18/2023 访问量:43

问:

table

我有一个具有这种结构的表。 我想从带有类“描述”的 TD 中抓取图像标题和段落中的文本。 我尝试了几种方法,但没有运气。 请帮帮我这个家伙,我真的堆在这里。

我认为我的问题很清楚,但到目前为止,我已经

 let descs = await page.evaluate(() => {
        let desc = Array.from(document.querySelectorAll('tr.even td.description p'))
        return desc.filter((p) => p.innerText !== "").map(p => p.innerText.replace((/  |\r\n|\n|\r/gm),""));
   });                                                                                                                              

使用此代码,我获得了段落文本,但是我怎样才能获得img标题?

html-table puppeteer 元素 href scrape

评论

0赞 ggorlen 11/15/2023
请分享您的多次尝试和确切的预期输出,以及页面本身。谢谢。您是否尝试检查现有问题?
0赞 Infern0 11/15/2023
使用相同的逻辑,只需更改选择器以匹配图像即可。ex: “tr.even td.description a img” - 并获取 title 属性。

答:

0赞 Yaroslavm 11/18/2023 #1

通过提供的 HTML 结构,我建议获取 td 元素并在其上执行映射。$$eval

其中 texts 是您定义的函数,您可以使用元素中的选择器。ptitlequerySelectorimg[src]td

await page.waitForSelector('tr.even td.description');
const data = await page.$$eval('tr.even td.description', tds =>
      tds.map(td => {
        return {
          texts: Array.from(td.querySelectorAll('p')).filter((p) => p.innerText !== "").map(p => p.innerText.replace((/  |\r\n|\n|\r/gm),"")),
          title: td.querySelector('img[src]')?.getAttribute('title'),
        }
      })
    );```