08-Pyppeteer

Pyppeteer的介绍

     Selenium 这个库,这其实是一个自动化测试工具,如今已经被普遍用于网络爬虫中来应对 JavaScript 渲染的页面的抓取。html

但 Selenium 用的时候有个麻烦事,就是环境的相关配置,得安装好相关浏览器,好比 Chrome、Firefox 等等,而后还要到官方网站去下载对应的驱动,最重要的还须要安装对应的 Python Selenium 库,确实是否是很方便,另外若是要作大规模部署的话,环境配置的一些问题也是个头疼的事情。git

那么本节就介绍另外一个相似的替代品,叫作 Pyppeteer。注意,是叫作 Pyppeteer,不是 Puppeteer。Puppeteer 是 Google 基于 Node.js 开发的一个工具,有了它咱们能够经过 JavaScript 来控制 Chrome 浏览器的一些操做,固然也能够用做网络爬虫上,其 API 极其完善,功能很是强大。 而 Pyppeteer 又是什么呢?它其实是 Puppeteer 的 Python 版本的实现,但他不是 Google 开发的,是一位来自于日本的工程师依据 Puppeteer 的一些功能开发出来的非官方版本。github

在 Pyppetter 中,实际上它背后也是有一个相似 Chrome 浏览器的 Chromium 浏览器在执行一些动做进行网页渲染,首先说下 Chrome 浏览器和 Chromium 浏览器的渊源。浏览器

Chromium 是谷歌为了研发 Chrome 而启动的项目,是彻底开源的。两者基于相同的源代码构建,Chrome 全部的新功能都会先在 Chromium 上实现,待验证稳定后才会移植,所以 Chromium 的版本更新频率更高,也会包含不少新的功能,但做为一款独立的浏览器,Chromium 的用户群体要小众得多。两款浏览器“同根同源”,它们有着一样的 Logo,但配色不一样,Chrome 由蓝红绿黄四种颜色组成,而 Chromium 由不一样深度的蓝色构成。安全

总的来讲,两款浏览器的内核是同样的,实现方式也是同样的,能够认为是开发版和正式版的区别,功能上基本是没有太大区别的。网络

Pyppeteer 就是依赖于 Chromium 这个浏览器来运行的。那么有了 Pyppeteer 以后,咱们就能够免去那些繁琐的环境配置等问题。若是第一次运行的时候,Chromium 浏览器没有安全,那么程序会帮咱们自动安装和配置,就免去了繁琐的环境配置等工做。另外 Pyppeteer 是基于 Python 的新特性 async 实现的,因此它的一些执行也支持异步操做,效率相对于 Selenium 来讲也提升了。less

安装

Pyppeteer 采用了 Python 的 async 机制,因此其运行要求的 Python 版本为 3.5 及以上。异步

安装方式:async

pip3 install pyppeteer

Pyppeteer快速上手

import asyncio
from lxml import etree
from pyppeteer import launch#发射
#必须在协程中声明浏览器 不然会出错
async def main():
    #由于这是函数 因此须要挂起
    #实例化浏览器对象 参数headless=False是有浏览器 True是没有浏览器
    browser =await launch(headless=False)
    #建立一个新的页面(由于函数仍是须要挂载)
    new_page = await browser.newPage()
    #在新建的网页发送url  请求网页须要挂起
    await new_page.goto("http://quotes.toscrape.com/js/")
    #获取新页面的源码数据 #解析的页面数据能够给循环事件对象添加回调函数,即先绑定task.add_done_callback(parser)参数为函数名
    page_text =await new_page.content()
    tree = etree.HTML(page_text)
    div_list = tree.xpath('//div[@class="quote"]')
    print(div_list)
    await browser.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

总之利用 Pyppeteer 咱们能够控制浏览器执行几乎全部动做,想要的操做和功能基本均可以实现,用它来自由地控制爬虫固然就不在话下了。函数

解释:launch 方法会新建一个 Browser 对象,而后赋值给 browser,而后调用 newPage 方法至关于浏览器中新建了一个选项卡,同时新建了一个 Page 对象。而后 Page 对象调用了 goto 方法就至关于在浏览器中输入了这个 URL,浏览器跳转到了对应的页面进行加载,加载完成以后再调用 content 方法,返回当前浏览器页面的源代码。而后进一步地,咱们用 lxml进行一样地解析,就能够获得 JavaScript 渲染的结果了。在这个过程当中,咱们没有配置 Chrome 浏览器,没有配置浏览器驱动,免去了一些繁琐的步骤,一样达到了 Selenium 的效果,还实现了异步抓取.

详细用法

了解了基本的实例以后,咱们再来梳理一下 Pyppeteer 的一些基本和经常使用操做。Pyppeteer 的几乎全部功能都能在其官方文档的 API Reference 里面找到,官方文档连接为:            

https://miyakogi.github.io/pyppeteer/reference.html

若是须要其余浏览器想要实现的功能,官方文档中去找。

本站公众号
   欢迎关注本站公众号,获取更多信息