爬虫界又出神器|一款比selenium更高效的利器

Selenium3+python3自动化(二十七)--爬页面源码(page_source) 前言 有时候通过元素的属性查找页面上的某个元素,可能不大好找,这时候可以从源码中爬想要的信息。selenium的page_source方法可以获取页面源码。 爬页面源码的作用:如,爬页面上所有的url地址,可以批量请求页面url地址,看是否存在404等异常等 一、page_source 1.selenium的page_source方法可以直接返回页面源码 二、re非贪婪模式 1.这里需导... 阅读详情

提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口,经常被我们用作爬虫工具来使用。但是selenium的缺点也很明显,比如速度太慢、对版本配置要求严苛,最麻烦是经常要更新对应的驱动


今天就给大家介绍另一款web自动化测试工具Pyppeteer,虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面都要远胜selenium。


640?wx_fmt=png



01.Pyppeteer简介


介绍Pyppeteer之前先说一下Puppeteer,Puppeteer是谷歌出品的一款基于Node.js开发的一款工具,主要是用来操纵Chrome浏览器的 API,通过Javascript代码来操纵Chrome浏览器,完成数据爬取、Web程序自动测试等任务。

Pyppeteer其实是Puppeteer的Python版本,下面简单介绍下Pyppeteer的两大特点,chromium浏览器和asyncio框架:

1).chromium

Chromium是一款独立的浏览器,是Google为发展自家的浏览器Google Chrome而开启的计划,相当于Chrome的实验版,Chromium的稳定性不如Chrome但是功能更加丰富,而且更新速度很快,通常每隔数小时就有新的开发版本发布。

640?wx_fmt=jpeg

Pyppeteer的web自动化是基于chromium来实现的,由于chromium中某些特性的关系,Pyppeteer的安装配置非常简单,关于这一点稍后我们会详细介绍。


2).asyncio

asyncio是Python的一个异步协程库,自3.4版本引入的标准库,直接内置了对异步IO的支持,号称是Python最有野心的库,官网上有非常详细的介绍:

640?wx_fmt=png

公众号里面也写过一篇关于asyncio的介绍(菜鸟上手Python最有野心的库Asyncio) .由于Pyppeteer是基于asyncio实现的,所以它本身就支持异步操作,执行效率得到大幅提升。



02.安装与使用


1).极简安装

使用pip install pyppeteer命令就能完成pyppeteer库的安装,至于chromium浏览器,只需要一条pyppeteer-install命令就会自动下载对应的最新版本chromium浏览器到pyppeteer的默认位置。


如果不运行pyppeteer-install命令,在第一次使用pyppeteer的时候也会自动下载并安装chromium浏览器,效果是一样的。总的来说,pyppeteer比起selenium省去了driver配置的环节。


当然,出于某种原因,也可能会出现chromium自动安装无法顺利完成的情况,这时可以考虑手动安装:首先,从下列网址中找到自己系统的对应版本,下载chromium压缩包;


 
'linux': 'https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/575458/chrome-linux.zip''mac': 'https://storage.googleapis.com/chromium-browser-snapshots/Mac/575458/chrome-mac.zip''win32': 'https://storage.googleapis.com/chromium-browser-snapshots/Win/575458/chrome-win32.zip''win64': 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip'

(左右滑动查看)


然后,将压缩包放到pyppeteer的指定目录下解压缩,windows系统的默认目录。其他系统下的默认目录可以参照下面这幅图:

640?wx_fmt=png


2).使用

装完后就来试试效果。一起来看下面这段代码,在main函数中,先是建立一个浏览器对象,然后打开新的标签页,访问百度主页,对当前页面截图并保存为“example.png”,最后关闭浏览器。前文也提到过,pyppeteer是基于asyncio构建的,所以在使用的时候需要用到async/await结构。

640?wx_fmt=png

运行上面这段代码会发现并没有浏览器弹出运行,这是因为Pyppeteer默认使用的是无头浏览器,如果想要浏览器显示,需要在launch函数中设置参数“headless =False”,程序运行结束后在同一目录下会出现截取到的网页图片:


640?wx_fmt=png

03.实战异步基金爬取


我们前面一直在说Pyppeteer是一款非常高效的web自动化测试工具,其本质原因是由于Pyppeteer是基于asyncio构建的,它的所有属性和方法几乎都是coroutine对象,因此在构建异步程序的时候非常方便,天生就支持异步运行。

下面就来对比顺序执行和异步运行的效率究竟如何:

1).基金爬取

我们把天天基金网中的开放式基金净值数据爬取作为本次的实验任务,下面这张图是一支基金的历史净值数据,这个页面是js加载的,没办法通过requests直接获取内容信息,因此可以考虑使用模拟浏览器操作的方式进行数据抓取。(事实上基金净值数据的获取是有API接口的,本次任务只是为了演示,不具备实用价值)

640?wx_fmt=png

为了使效果更加明显,我们此次爬取基金列表页(下图)前50支基金的近20个交易日的净值数据。

640?wx_fmt=png


2).顺序执行

程序构建的基本思路是新建一个browser浏览器和一个页面page,依次访问每个基金的净值数据页面并爬取数据。核心代码如下:

640?wx_fmt=png

代码中的get_data()函数用于净值数据页面解析和数据的转化,get_all_codes()函数用于获取全部开放式基金的基金代码(共6000余个)。虽然程序也使用了async/await的结构,但是对多个基金的净值数据获取都是在callurl_and_getdata()函数中顺序执行的,之所以这样写是因为pyppeteer中的方法都是coroutine对象,必须以这种形式构建程序。

为了排除打开浏览器的耗时干扰,我们仅统计访问页面和数据抓取的用时,其结果为:12.08秒。


3).异步执行

下面我们把程序改造一下,功能函数都不变,主要是把对fundlist的循环运行改装成async的task对象。核心代码如下:

640?wx_fmt=png

耗时的统计区间仍然从浏览器打开后开始计算,其运行用时为:2.18秒,相比顺序执行要快了6倍。可以想象,如果需要爬取的工作量比较大,顺序执行需要10个小时的话,异步执行可能只需要不到2个小时,优化效果可谓非常明显了。

有兴趣的同学可以动手试试这个库。


往期热门:

小密圈人气很高的两个实战项目

高手心得|菜鸟学Python从入门到进阶

python中用selenium进行自动打开浏览器打开指定网页并关闭-带图详解 python中用selenium进行自动打开浏览器打开指定网页并关闭 阅读详情

相关推荐

page_sourse爬取渲染后的页面代码

爬页面源码(page_source) 一般来说,selenium的page_source方法可以直接返回页面源代码 爬取网页ICP号: from selenium import webdriver import re html_list=[ "http://anzhuo.paojiao.cn/", "http://sj.zol.com.cn/android_app/", "https://appgallery.huawei.com/#/Apps", ] for url in

米兔-miny的博客 1194

selenium 爬页面源码(page_source )

前言 有时候通过元素的属性的查找页面上的某个元素,可能不太好找,这时候可以从源码中爬想要的信息。selenium 的 page_source 方法可以获取到页面源码。1.selenium 的 page_source 方法可以直接返回页面源码 2.重新赋值后打印来这里可以使用正则匹配到你想要的数据,比如我这里想要所有的链接,

MTbaby的博客 2万+

OpenClaw 从新手到中级完整教程【完整 持续新版】

OpenClaw(曾用名 ClawdBot/Moltbot)是 2026 年最火的开源 AI Agent 项目,GitHub 已获得超过 68,000 星标。它不是普通的聊天机器人,而是一个真正能够执行任务的个人 AI 助理。

FeelTouch Labs 3037

爬虫的新神器|selenium高效

本文转自公众号:菜鸟学Python提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口...

苏克的博客 491

爬虫神器一款selenium高效利器

提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口,经常被我们用作爬虫工具来使用。但是selenium的缺点也很明显,比如速度太慢、对版本配置要求严苛,最麻烦是经常要新对应的驱动。 今天就给大家介绍另一款web自动化测试工具Pyppeteer,虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面都要远胜...

chen801090的博客 7639

linux selenium_爬虫神器一款selenium高效利器

提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口,经常被我们用作爬虫工具来使用。但是selenium的缺点也很明显,比如速度太慢、对版本配置要求严苛,最麻烦是经常要新对应的驱动。今天就给大家介绍另一款web自动化测试工具Pyppeteer,虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面都要远胜s...

weixin_39920397的博客 117

linux selenium_爬虫神器|一款selenium高效利器

提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口,经常被我们用作爬虫工具来使用。但是selenium的缺点也很明显,比如速度太慢、对版本配置要求严苛,最麻烦是经常要新对应的驱动。今天就给大家介绍另一款web自动化测试工具Pyppeteer,虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面...

weixin_39746282的博客 207

selenium page_source跟手动打开的不一样_爬虫神器一款selenium高效利器...

提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口,经常被我们用作爬虫工具来使用。但是selenium的缺点也很明显,比如速度太慢、对版本配置要求严苛,最麻烦是经常要新对应的驱动。今天就给大家介绍另一款web自动化测试工具Pyppeteer,虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面都要远胜s...

weixin_39815031的博客 344

selenium page_source跟手动打开的不一样_爬虫神器 | 一款selenium高效利器...

(点击上方快速关注并设置为星标,一起学Python)来源:菜鸟学Python 链接:https://mp.weixin.qq.com/s/PnKdH_wq2sWKr-Wq55fy-A提起selenium想必大家都不陌生,作为一款知名的Web自动化测试框架,selenium支持多款主流浏览器,提供了功能丰富的API接口,经常被我们用作爬虫工具来使用。但是selenium的缺点也很明显,比...

weixin_39747383的博客 387

爬虫神器 | 一款Selenium高效利器

作者|奔跑的鳄鱼(一个Python爱好者,努力从菜鸟变成高手)来源|菜鸟学Python(ID:cainiao_xueyuan)提起Selenium想必大家都不陌生,作为一...

Python大本营的博客 3524

【AI智能体】基于OpenCode 搭建Skills环境与项目实战开发详解

基于OpenCode 搭建Skills环境与项目实战开发详解

congge 8809

RFM-001.rar_rfm001_tms3705_tms3705 pudn_接触IC卡文档

RFM001编程文档,是学习非接触IC卡编程的必备文档资料

上一篇: 用Python分析韩国女团喜欢什么单词
下一篇: Scrapy之10行代码爬下电影天堂全站
菜鸟学Python
博客等级 码龄9年 7561粉丝 571原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值