【问题标题】:can't scrape all adds in facebook marketplace无法抓取 Facebook 市场中的所有广告
【发布时间】:2021-06-16 04:12:28
【问题描述】:

我正在尝试抓取 Facebook 市场,但只有第一个添加被抓取,任何人都可以建议一种方法来抓取整个添加列表

代码

(async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.setViewport({ width: 1366, height: 500 });
    let url = 'https://www.facebook.com/marketplace/nyc/search/?query=cars';
    await page.goto(url, {
        waitUntil: 'networkidle2',
    });
    //await autoScroll(page);
    console.log('scraping...')
    await delay(4000);
    let data = await page.evaluate(() => {
       
        let carData = document.querySelectorAll('div [class = "fome6x0j tkqzz1yd aodizinl fjf4s8hc f7vcsfb0"]');
        const cars = []
        carData.forEach((element) => {
           // cars.push(element.innerText)
           let add = element.querySelector('div [class = "sonix8o1"]');
           cars.push(add.innerText)
        })
        return cars

    });
    console.log(data)
})();

我只得到一个输出,我想要实现的是单独访问每个数据

【问题讨论】:

    标签: javascript node.js web-scraping puppeteer


    【解决方案1】:

    你可以试试这个。

    (async () => {
      let browser, page;
      let url = 'https://www.facebook.com/marketplace/nyc/search/?query=cars';
    
      try {
        browser = await puppeteer.launch({ headless: false });
        page = await browser.newPage();
        await page.setViewport({ width: 1366, height: 500 });
        await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 60000 });
    
        let data = await page.evaluate(() => {
          let cars = [];
    
          if (document.querySelectorAll('div[class="sonix8o1"]')) {
            document.querySelectorAll('div[class="sonix8o1"]').forEach(element => {
              cars.push(element.innerText);
            });
          }
                
          return cars;
        });
    
        console.log(data);
      } catch (error) {
        console.log(error.message);
      } finally {
        if (browser) {
          await browser.close();
          console.log('closing browser');
        }
      }
    })();
    

    或者你可以这样试试。

    (async () => {
      let browser, page;
      let url = 'https://www.facebook.com/marketplace/nyc/search/?query=cars';
    
      try {
        browser = await puppeteer.launch({ headless: false });
        page = await browser.newPage();
        await page.setViewport({ width: 1366, height: 500 });
        await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 60000 });
    
        let data = await page.evaluate(() => {
          let cars = [];
    
          if (document.querySelectorAll('div[class="sonix8o1"]')) {
            let elements = document.querySelectorAll('div[class="sonix8o1"]');
            for (let i = 0; i < elements.length; i++) {
              cars.push(elements[i].innerText);
            }
          }
                
          return cars;
        });
    
        console.log(data);
      } catch (error) {
        console.log(error.message);
      } finally {
        if (browser) {
          await browser.close();
          console.log('closing browser');
        }
      }
    })();
    

    【讨论】:

    • @mohan A 如果这回答了您的问题,您应该接受答案。按赞成票旁边的勾号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2019-12-11
    • 2017-12-10
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多