美文网首页
Node puppeteer 爬虫

Node puppeteer 爬虫

作者: visitor009 | 来源:发表于2020-05-19 21:19 被阅读0次

    puppeteer 中文文档

    开始

    // 设置国内源,否则下载puppeteer很慢
    shell> npm config set registry http://registry.npm.taobao.org 
    shell> npm init -y
    shell> npm i puppeteer@3.1.0
    

    爬取豆瓣书籍列表

    豆瓣读书 在这个页面输入javascript,然后爬取列表
    案例特征:需要点击下一步才能获取数据

    /* 
    1. 进入豆瓣读书首页,在输入框输入javascript,点击搜索
    2. 抓取搜索列表的数据保存 data 变量
    3. 将data 保存到 result.json 中,成功后继续点击下页
    4. 重复运行 2,3步 */
    const puppeteer = require('puppeteer');
    let fs = require('fs')
    let data = []; // 保存爬取到的数据
    
    // 抓取每个页面的数据
    async function getPageData(page) {
        const result = await page.evaluate(() => {
            let containers = document.querySelectorAll('.sc-bZQynM'); // 每条书籍的容器
            let data = [];
            [...containers].forEach((el,elI)=>{
                let title = el.querySelector('.title').innerText; // 标题
                let ratingNum = el.querySelector('.rating_nums'); // 评分
                let readNum = el.querySelector('.pl').innerText;; // 评价人数
                ratingNum = ratingNum ? ratingNum.innerText : '0';
                data.push({
                    title,ratingNum,readNum,
                })
            })
            return data
        });
        return result;
    }
    
    // 开始运行--------
    puppeteer.launch({
        headless: false, // 有界面运行
    }).then(async browser => {
        const page = await browser.newPage();
        await page.setViewport({
            width: 1800,
            height: 900
        })
        console.log('Start...')
        await page.goto('https://book.douban.com/');
        await page.focus('#inp-query');
        await page.keyboard.sendCharacter('javascript');
        await page.click('.inp-btn')
    
        console.log('Into page')
        page.on('load',async ()=>{ // 每次新页面加载都会触发
            console.log('Page loaded');
            let result = await getPageData(page);
            data.push(...result); // 将每个页面抓到的数据追加到 data ,直接写入文件
            
            fs.writeFile('result.json',JSON.stringify(data),()=>{
                console.log('The file is writed')
                page.click('.paginator .next') // 继续下一页
            })
        })
    });
    

    相关文章

      网友评论

          本文标题:Node puppeteer 爬虫

          本文链接:https://www.haomeiwen.com/subject/djlbohtx.html