puppeteer的简单使用_爬取页面信息

使用chrome无头浏览器做爬虫 - 有什么拿什么

puppeteer

它是Node的一个用来操纵浏览器的API的库,对的你没看错,就是操作浏览器的,细思极恐啊
简单说就是浏览器有的它都有了(当然有些功能也正在开发中)
可以注册,模拟登陆,设置cookie
操作dom事件,执行js脚本
Chrome团队对其维护,厉害了吧
文档地址: https://github.com/GoogleChro...

安装

首先Nodejs 的版本不能低于 v7.6.0, 因为全都是 async, await 异步操作
npm install puppeteer -S
出现安装问题的小伙伴可以试一试npm的内置配置文件,当前目录下新建一个.npmrc结尾的文件,内容如下
registry=https://registry.npm.taobao.org
chromedriver_cdnurl=http://npm.taobao.org/mirrors/chromedriver
phantomjs_cdnurl=https://npm.taobao.org/dist/phantomjs
electron_mirror=https://npm.taobao.org/mirrors/electron/
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
puppeteer_download_host=https://cdn.npm.taobao.org/dist

官网的demo

const puppeteer = require('puppeteer');
(async () => {
  // 创建一个浏览器实例 Browser 对象
  const browser = await puppeteer.launch();
  // 通过浏览器实例 Browser 对象创建页面 Page 对象
  const page = await browser.newPage();
  // 通过url参数打开指定的页面
  await page.goto('https://example.com');
  // 对页面进行截图
  await page.screenshot({path: 'example.png'});
  // 关闭浏览器
  await browser.close();
})();

先来个最最基本的抓取

实战_抓取2345小说站任意书籍的章节列表

图片描述

两个箭头标记的

  1. 观察url,.html之前的数字就是抓取书籍的bookId
  2. 章节列表所在容器标签
上干货,都在注释里了

图片描述
clipboard.png

抓取的结果

clipboard.png

完整代码
const puppeteer = require('puppeteer');
(async ()=>{
    try{
        // 创建一个浏览器实例 Browser 对象
        let browser = await puppeteer.launch({
            // 是否不显示浏览器, 为true则不显示
            'headless': false,
        });
        // 通过浏览器实例 Browser 对象创建页面 Page 对象
        let page = await browser.newPage();
        // 设置浏览器信息
        const UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/63.0.3239.84 Chrome/63.0.3239.84 Safari/537.36";
        await Promise.all([
            page.setUserAgent(UA),
            // 允许运行js
            page.setJavaScriptEnabled(true),
            // 设置页面视口的大小
            page.setViewport({width: 1100, height: 1080}),
        ]);
        // 地址
        let chapter_list_url = `http://book.km.com/chapterlist/396353.html`
        // 打开章节列表
        await page.goto(chapter_list_url);
        // 使用css选择器的方式
        let content= await page.$eval('#xtopjsinfo > div.wrapper > div.container > div.catalog > div.catalog_bd', el => el.innerText);
        console.log(content);
    }catch(err){
        console.log(err)
    }
})()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值