zoukankan      html  css  js  c++  java
  • Pupeteer爬虫实践(爬取淘宝商品)

    概要

    Puppeteer的入门教程和实践一文章,其中介绍了Puppeteer的几种使用方式,分别是网页截图,生成页面的PDF,分析当前页的脚本,写爬虫等,本文主要介绍了如何利用Puppeteer实现抓取淘宝特定商品的信息的过程。

    代码

    废话不多说,直接上代码。

    //taobaoCrepper.js
    const puppeteer = require('puppeteer');
    const chalk = require('chalk');
    
    let url = 'https://detail.tmall.com/item.htm?spm=a1z10.1-b-s.w19370147-18846483048.2.5ccf70bfVlqaMZ&id=568960237310&sku_properties=5919063:1173069333&scene=taobao_shop';  //要抓取的商品链接
    
    let main = async function(){
        let browser = await puppeteer.launch({
            headless:false,
            devtools:true
        });
    
        let page = await browser.newPage();
    
        await page.goto(url,{
            waitUntil:'networkidle0'
        });
    
        console.log(chalk.green('进入宝贝详情页'));
    
        // await page.setViewport({
        //     1920,
        //     height:1080
        // });
    
        let obj ={
            title:'',
            colors:[],
            price:0,
            suit:[],
            skus:[],
            detailImgs:[],
            evaList:[]
        };
        try{
    
            //获取模态窗口
            let modalArray = await page.$$('#sufei-dialog-close');
            
            //判断模态窗口是否存在,存在就关闭
            if(modalArray.length){
                await page.click('#sufei-dialog-close');
            }
    
    
            await page.waitFor(15000);
    
            obj.title= await page.$eval('.tb-detail-hd > h1 >a',ele =>ele.text) ;
            obj.price = await page.$eval('.tm-price',ele => ele.innerHTML);
        
            obj.colors = await page.evaluate(()=>{  
                let as = [...document.querySelectorAll('li.tb-txt a > span')];
                return as.map((a)=>{
                    return a.innerHTML;
                }); 
            });
    
            obj.suit = await page.evaluate(()=>{  
                let as = [...document.querySelectorAll('li.tb-selected > a > span')];
                return as.map((a)=>{
                    return a.innerHTML;
                }); 
            });
    
            obj.skus = await page.evaluate(()=>{  
                let as = [...document.querySelectorAll('ul#J_UlThumb >li> a > img')];
                return as.map((a)=>{
                    return a.src;
                }); 
            });
    
        
    
            obj.detailImgs = await page.evaluate(()=>{  
                let as = [...document.querySelectorAll('div.ke-post > p > img')];
                return as.map((a)=>{
                    return a.src;
                }); 
            });
            
            await page.click('a[href="#J_Reviews"] ');
            await page.waitFor(15000);
            obj.evaList = await page.evaluate(()=>{  
                console.log('进入评价分析抓取方法');
                let evaList = [...document.querySelectorAll('div.tm-rate-content>div.tm-rate-fulltxt')];
                console.log(evaList);
                return evaList.map((a)=>{
                    return a.textContent;
                });
            });
        }catch(err){
            console.log(chalk.red(err));
        }
    };
    
    main();
    

    注意事项

    (1) 跳转到淘宝商品信息页面时会弹出模态窗口,有时不会,需要做一个判断。
    (2)跳转到商品评价列表后要设置延时,等DOM加载完毕后再去获取对应内容。
    (3)在抓取评价列表详情时,选择器不能之写成“div.tm-rate-fulltxt”,否则后把卖家回复的内容也抓取下来。
    (4)本文只是把特定内容用JS爬取出来,并不涉及写入数据库的操作,待我学完再来更新呀555。

  • 相关阅读:
    uva 489 Hangman Judge(水题)
    中国海洋大学第四届朗讯杯高级组 Cash Cow(模拟)
    中国海洋大学第四届朗讯杯高级组 A 2718 Rocky(模拟)
    poj 1039 Pipe(叉乘。。。)
    CodeForces 135 B. Rectangle and Square(判断正方形和 矩形)
    poj 1265 Area( pick 定理 )
    poj 2031 Building a Space Station(prime )
    hdu 4502 吉哥系列故事——临时工计划(dp)
    拉格朗日插值
    [USACO18DEC]The Cow Gathering P
  • 原文地址:https://www.cnblogs.com/JessicaIsEvolving/p/9639336.html
Copyright © 2011-2022 走看看