操纵符:如何调用动作等待page.goto(`$ {url}`);在.map((index,element)=> {

问题描述 投票:0回答:2

我正在从网页上抓取数据,分页也可以。我有一张桌子。对于每个tr,都有位置,标题和URL。

在函数.map((index,element)=> {我想为每个tr调用“ async url => {await page.goto(${url});”并转到详细信息,从详细信息页面抓取数据并返回到列表。

我该怎么办? (在.map()中调用异步)

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


      async function scrapeListings(page) {
     await page.goto(
       "https://www.example.com/podcast-detail/nth28-2ef41/99%25-Invisible- 
      Podcast",
        { waitUntil: ["load", "domcontentloaded", "networkidle0"] }
    );

     let moreResults = true;

     while (moreResults) {
     console.log(moreResults);
      try {
      const html = await page.content();
      const $ = cheerio.load(html);
      const listings = $("#yw0 > table > tbody > tr")
        .map((index, element) => {
          const position = $(element)
            .find("td.id.tc")
            .text();
          const title = $(element)
            .find("a.title.listen-now")
            .text();
          const url = $(element)
            .find("a")
            .attr("href");
          const datetime = $(element)
            .find("span.datetime")
            .text();
          async url => {
            await page.goto(`${url}`);
            //Open URL for details
            //SCRAPE Details
            //return value and store to listing
          };
          return { position, title, datetime, url };
        })
        .get();

      await sleep(1000);
      element = await page.$x(`//a[contains(text(),'→')]`);
      await element[0].click();
      console.log(listings);
      //await page.waitForNavigation();
    } catch (error) {
      moreResults = false;
      }
      }
     }

     async function sleep(miliseconds) {
     return new Promise(resolve => setTimeout(resolve, miliseconds));
      }

    async function main() {
     //await connectToMongoDb();

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

     await page.setViewport({ width: 1920, height: 1057 });

     listings = await scrapeListings(page);

    console.log(listings);
     //await browser.close();
   }

    main();

我正在从网页上抓取数据,分页也可以。我有一张桌子。对于每个tr,都有位置,标题和URL。在函数.map((index,element)=> {我想为每个tr调用“ ...

puppeteer
2个回答
0
投票

我尝试将您的脚本重新编码为仅使用Puppeteer。无需加油。


0
投票

[如果有人需要单击链接并打开一个新页面而不是调用url,这是代码:也许有些解决方案更好,可以自由分享,谢谢]

© www.soinside.com 2019 - 2024. All rights reserved.