puppeteer 爬取数据

puppeteer我用到的有两种爬取方法

第一种是根据页面选择器去爬取对应的数据 第二种是根据接口去爬取
一 、以Facebook的广告页页面数据为例,我需要拿到对应的数据

在这里插入图片描述

const puppeteer = require('puppeteer');
        let URL = `https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=ALL&view_all_page_id=${
     id}`  
        const browser = await puppeteer.launch({
   headless: false});
        const page = await browser.newPage();
        
      
        await page.goto(URL,{
   
            timeout: 30 * 1000,
            waitUntil: [
                'load',              //等待 “load” 事件触发
                'domcontentloaded',  //等待 “domcontentloaded” 事件触发
                'networkidle0',      //在 500ms 内没有任何网络连接
                'networkidle2'       //在 500ms 内网络连接个数不超过 2 个
            ]   
        });
        let Selector = '#content > div > div > div._7lcc > div._8n-_ > div._8n-x > div > div._9ccv > div:nth-child(2) > div._9cb_ > div'

        
        try {
   
            await page.click(Selector)
         }
         catch(err){
   
            console.log('找不到!')
            browser.close();
            return false;
         }
        await autoScroll(page);

        const result = await page.evaluate(() => {
   
            let data = []; // 初始化空数组来存储数据
            let elements = document.querySelectorAll('._99s5'); // 获取所有广告
            for (var element of elements){
    // 循环
                let state = element.querySelector('._7jv-').innerText; 
                let castDate = element.querySelector('._9cd3').innerText; 
                let orderNumber = element.querySelector('._9cd3 div').innerText.split(':')[1]; 
                let videoUrl = element.querySelector('._8o0a video') ==null ? element.querySelector('._7jys')==null ? 'https://images.zzsbx.com/upload/20201010/9522a4e5fa4e47108e9d40ed0ae0b6fd.png' :element.querySelector('._7jys').getAttribute('src') : element.querySelector('._8o0a video').getAttribute('src')
                let orderUrl = element.querySelector('._231w') == null ? element.querySelector('._4ik4 div a')==null ? '': element.querySelector('._4ik4 div a').getAttribute('href') :element.querySelector('._231w').getAttribute('href')
                let title = element.querySelector('._7jyr div ._4ik4 div') ==null ? ' ' : element.querySelector('._7jyr div ._4ik4 div').innerText; 
                let nums = element.querySelector('._9b9y span strong')== null ? '1' : element.querySelector('._9b9y span strong').innerText.split('条')[0]; 
                let content = element.querySelector('._8jgz ._8jh1 ._8jh2 div ._4ik4') == null ? ' ' : element.querySelector('._8jgz ._8jh1 ._8jh2 div ._4ik4').innerText;
              
                data.push({
   state,castDate,orderNumber,videoUrl,orderUrl,title,nums,content}); // 存入数组
            }
            return data; // 返回数据
        })
    
        browser.close();
        console.log('result',result)
        return result;

第二种是根据数据接口去爬取

在这里插入图片描述

const puppeteer = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值