方便操作的采集神器(,.js开发的Python版本特点介绍)
优采云 发布时间: 2021-11-13 17:15方便操作的采集神器(,.js开发的Python版本特点介绍)
本文文章主要介绍python爬虫神器Pyppeteer的入门和使用。通过示例代码介绍非常详细。对大家的学习或工作有一定的参考学习价值,有需要的朋友可以参考。
前言
Selenium 想必大家都不陌生。selenium作为知名的Web自动化测试框架,支持多种主流浏览器,提供丰富的API接口,经常被我们用作爬虫工具。但是硒的缺点也很明显。比如速度太慢,版本配置要求严格,最麻烦的就是频繁更新相应的驱动。
今天给大家介绍另一个Web自动化测试工具Pyppeteer。虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率上,都远胜于selenium。
01.Pyppeteer 介绍
在介绍 Pyppeteer 之前,先说一下 Puppeteer。Puppeteer 是 Google 基于 Node.js 开发的工具。主要用于操作Chrome浏览器的API,利用Javascript代码操作Chrome浏览器完成数据爬取、Web程序自动测试等任务。
Pyppeteer 实际上是 Puppeteer 的 Python 版本。下面简单介绍一下Pyppeteer的两大特性,chrome浏览器和asyncio框架:
1).chromium
Chromium 是一个独立的浏览器。Google 计划开发自己的浏览器 Google Chrome。它相当于 Chrome 的实验版。Chromium 不如 Chrome 稳定,但功能更多且更新速度快。每隔几个小时就会发布一个新的开发版本。
Pyppeteer 的网络自动化基于铬。由于chromium的一些特性,Pyppeteer的安装和配置非常简单。我们稍后会详细介绍这一点。
2).asyncio
asyncio 是 Python 的异步协程库。3. 版本 4 引入的标准库直接内置了对异步 IO 的支持。它被称为 Python 中最雄心勃勃的库。官网上有很详细的介绍:
02.安装使用
1)。最少安装
使用pip install pyppeteer命令完成pyppeteer库的安装。对于chromium浏览器,只需要一个pyppeteer-install命令就会自动下载对应最新版本的chrome浏览器到pyppeteer的默认位置。
如果不运行pyppeteer-install命令,第一次使用pyppeteer时会自动下载安装chrome浏览器,效果是一样的。总的来说,pyppeteer 相比 selenium 更节省了驱动配置链接。
当然,由于某些原因,Chromium 的自动安装可能无法成功完成。这时候可以考虑手动安装:首先从以下网站找到你系统对应的版本,下载chromium压缩包;
'Linux':''
'苹果电脑':''
'win32':''
'win64':''
然后,将压缩包放到pyppeteer的指定目录下并解压,windows系统默认目录。其他系统下的默认目录可以参考下图:
2)。用
安装后试一下效果。我们来看看下面的代码。在main函数中,首先创建一个浏览器对象,然后打开一个新标签页,访问百度主页,将当前页面截图保存为“example.png”,最后关闭浏览器。前面说过,pyppeteer是建立在asyncio之上的,所以在使用的时候需要用到async/await结构。
如果你运行上面的代码,你会发现没有浏览器弹出。这是因为 Pyppeteer 默认使用无头浏览器。如果要浏览器显示,需要在launch函数中设置参数“headless=False”,程序结束。那么抓到的网页图片就会出现在同一个目录下:
03. 实用异步资金爬取
我们一直在说 Pyppeteer 是一个非常高效的 Web 自动化测试工具。本质原因是Pyppeteer是基于asyncio的。它几乎所有的属性和方法都是协程对象,因此在构建异步程序时非常方便。,它天生就支持异步操作。
我们来比较顺序执行和异步操作的效率:
1)。资金爬取
我们以在天天基金网爬取开放式基金净值数据作为本次实验任务。下图是一只基金的历史净值数据。这个页面是js加载的,没有办法直接通过请求获取内容信息。因此,您可以考虑使用一种方式来模拟浏览器操作进行数据捕获。(其实有获取基金净值数据的API接口,这个任务只是演示,没有实际价值)
为了让效果更加明显,我们在基金列表页面(下图)抓取了过去20个交易日前50名基金的净值数据。
2)。顺序执行
程序构建的基本思路是创建浏览器浏览器和页面页面,依次访问各个基金的净值数据页面并抓取数据。核心代码如下:
代码中的get_data()函数用于分析净值数据页面和数据转换,get_all_codes()函数用于获取所有开放式基金的基金代码(共6000多只)。程序虽然也使用了async/await的结构,但是在callurl_and_getdata()函数中,多只基金的净值数据获取是顺序执行的。之所以写这个,是因为pyppeteer中的方法都是协程对象,必须是A形式的构造程序。
为了消除打开浏览器的耗时干扰,我们只统计了访问页面和数据抓取所用的时间,结果为:12.08秒。
3)。异步执行
修改一下程序,函数功能不变,主要是将fundlist的循环操作修改成一个异步任务对象。核心代码如下:
耗时统计间隔依然在浏览器打开后计算,其运行时间为:2.18秒,比顺序执行快6倍。可以想象,如果爬虫的工作量比较大,顺序执行需要10个小时,那么异步执行可能只需要不到2个小时,优化效果可以用非常明显来形容。
推荐我们的python学习库,看看前辈们是怎么学习的!从基本的python脚本、爬虫、django、数据挖掘
以及其他的编程技巧,以及从零基础到实际项目的资料整理,适合每一个热爱学习python的小伙伴!每天都有老人
定期讲解Python技术,分享一些学习方法和需要注意的小细节,点击加入我们的python学习者聚集地