【问题标题】:Trying to scrape Apple review with puppeteer, but it returns empty试图用 puppeteer 抓取 Apple 评论,但它返回空
【发布时间】:2021-09-21 10:21:25
【问题描述】:

我正在尝试抓取以下所有评论;

https://apps.apple.com/jp/app/mcdonalds-japan/id413618155?l=en#see-all/reviews

如果您可以看到评论被遮挡,那么您需要;

  • 点击查看评价
  • 滚动查看更多

我还有很长的路要走,但我已经尝试过这段代码;

import puppeteer from 'puppeteer';

const url = "https://apps.apple.com/jp/app/mcdonalds-japan/id413618155?l=en#see-all/reviews";

(async () => {

  try {

    const browser = await puppeteer.launch({
      headless: false
    });
    const page = await browser.newPage();

    await page.goto(
      url,{
      waitUntil: "domcontentloaded"
    });
    await page.waitForTimeout(4000);
    let result = await page.evaluate(() => {
      const items = Array.from(document.querySelectorAll("div"));
      return items
    })

    console.log(result);
    await browser.close();


  } catch (e) {
    console.error();
  }

})();

但是结果返回空,不知道我做错了什么。

[
  {}, {}, {}, {}, {}, {}, {}, {},
  {}, {}, {}, {}, {}, {}, {}, {},
  {}, {}, {}, {}, {}, {}, {}, {},
  {}, {}, {}
]

【问题讨论】:

标签: javascript node.js web-scraping puppeteer


【解决方案1】:

不幸的是,page.evaluate() 只能传输可序列化的值(大致是 JSON 可以处理的值)。由于document.querySelectorAll() 返回一个不可序列化的 DOM 元素集合(它们包含方法和循环引用),所以集合中的每个元素都被替换为一个空对象。您需要返回可序列化的值(例如,文本或属性数组)或使用 page.$$(selector)ElementHandle API 之类的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-19
    • 2022-08-18
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2023-02-24
    • 2020-08-01
    相关资源
    最近更新 更多