Python爬虫神器pyppeteer
简介
pyppeteer 是非官方 Python 版本的 Puppeteer 库,浏览器自动化库,由日本工程师开发。
Puppeteer 是 Google 基于 Node.js 开发的工具,调用 Chrome 的 API,通过 JavaScript 代码来操纵 Chrome 完成一些操作,用于网络爬虫、Web 程序自动测试等。
pyppeteer 使用了 Python 异步协程库 asyncio,可整合 Scrapy 进行分布式爬虫。
pyppeteer维护得不好;puppet 木偶;puppeteer 操纵木偶的人。
安装
- 安装
pyppeteer
pip install pyppeteer
2.安装 Chromium
pyppeteer-install
注意:首次运行pyppeteer会自动下载Chromium(Chrome的实验版,约150MB)
若 Chromium
安装失败,可手动下载
3.查看 Chromium 存放路径
import pyppeteer print(pyppeteer.__chromium_revision__) # 查看版本号
print(pyppeteer.executablePath()) # 查看 Chromium 存放路径
# 588429
# C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\chrome-win32\chrome.exe
解压到:C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\
下
将文件夹 chrome-win
重命名为 chrome-win32
即可
配置详情查看 Pyppeteer Environment Variables
初试
打开百度并截图
import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False) # 关闭无头浏览器page = await browser.newPage()await page.goto('https://www.baidu.com/') # 跳转await page.screenshot({'path': 'example.png'}) # 截图await browser.close() # 关闭asyncio.get_event_loop().run_until_complete(main())
指定浏览器路径
指定参数 executablePath
import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, executablePath=r'C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\588429\chrome-win32\chrome.exe') # 关闭无头浏览器page = await browser.newPage()await page.goto('https://www.baidu.com/') # 跳转await page.screenshot({'path': 'example.png'}) # 截图await browser.close() # 关闭asyncio.get_event_loop().run_until_complete(main())
移除Chrome正受到自动测试软件的控制
import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation']input()await browser.close()asyncio.get_event_loop().run_until_complete(main())
全屏
import tkinter
import asyncio
from pyppeteer import launchdef screen_size():tk = tkinter.Tk()width = tk.winfo_screenwidth()height = tk.winfo_screenheight()tk.quit()return {'width': width, 'height': height}async def main():browser = await launch(headless=False, args=['--start-maximized']) # 页面全屏page = await browser.newPage()await page.setViewport(screen_size()) # 内容全屏await page.goto('https://www.baidu.com/')input()await browser.close()asyncio.get_event_loop().run_until_complete(main())
页面内容
Page.content()
或 Page.evaluate()
import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False)page = await browser.newPage()url = 'https://www.baidu.com/'await page.goto(url)# content = await page.content()content = await page.evaluate('document.body.textContent', force_expr=True)print(content)input()await browser.close()asyncio.get_event_loop().run_until_complete(main())
异步运行
asyncio.wait()
或 asyncio.gather()
,建议只用在一次性读取的页面,需要滚动的不建议使用
import asyncio
from pyppeteer import launchasync def crawl(url):browser = await launch(headless=False)page = await browser.newPage()await page.goto(url)title= await page.title()print(title)print(title)await browser.close()async def main():urls = [crawl('https://www.baidu.com/'),crawl('https://www.bing.com/')]await asyncio.wait(urls)# await asncio.gather(*urls)asyncio.get_event_loop().run_until_complete(main())
# 百度一下,你就知道
# 微软 Bing 搜索 - 国内版
报错 OSError: Unable to remove Temporary User Data
启动浏览器时指定参数userDataDir存放缓存,保证硬盘大且不是系统盘
import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, userDataDir='./cache/')input()await browser.close()asyncio.get_event_loop().run_until_complete(main())
报错 pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.
封装
import asyncio
from pyppeteer import launchasync def main():browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'], userDataDir='./cache/') #page = await browser.newPage()await page.setViewport({'width': 1366, 'height': 768}) # 内容铺满await page.goto('https://www.baidu.com/') # 跳转input('回车退出')await browser.close()asyncio.get_event_loop().run_until_complete(main())
参考文献
- pyppeteer/pyppeteer: Headless chrome/chromium automation library
- Pyppeteer Documentation
- Chromium - The Chromium Projects
- Pyppeteer Environment Variables
- pyppeteer的环境搭建,常见参数及2个案例
- pyppeteer使用遇到的bug及解决方法
- pyppeteer 爬取京东商城和淘宝示例代码|获取cookie爬取搜索内容
- pyppeteer教程
- pyppeteer: 解决OSError: Unable to remove Temporary User Data的报错问题
- 解决pyppeteer导航超时问题: pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.
- python异步编程之asyncio(百万并发)
- Python 异步编程入门
Python爬虫神器pyppeteer相关推荐
- Python爬虫神器pyppeteer,对 js 加密降维打击
爬虫神器pyppeteer,对 js 加密降维打击 pyppeteer 是对无头浏览器 puppeteer 的 Python 封装.无头浏览器广泛用于自动化测试,同时也是一种很好地爬虫思路. 使用 ...
- 基于浏览器的python爬虫神器pyppeteer介绍及入门
简介 在讲 python 的 pyppeteer 前,先来说下 Node 的 puppeteer 库: puppeteer的中文意思是:操纵木偶的人,木偶师. 那么 Node 的 puppeteer ...
- python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...
前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...
- 5分钟学会Python爬虫神器autoscraper——自动化爬虫必备
5分钟学会Python爬虫神器autoscraper--自动化爬虫必备 爬虫神器autoscraper介绍 安装 使用 批量抓取 查看结果 爬虫神器autoscraper介绍 今天给大家介绍一个非常智 ...
- Python爬虫之pyppeteer的使用(爬虫、获取cookie、截屏插件、防爬绕过)
官方帮助: https://pyppeteer.github.io/pyppeteer/reference.html 下载文本中的网页源码,由于需要向下拉动滚动条所以使用pyppeteer渲染网页,并 ...
- 以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
1.安装BeautifulSoup4 easy_install安装方式,easy_install需要提前安装 1 easy_install beautifulsoup4 pip安装方式,pip也需要提 ...
- 一款懒人必备的Python爬虫神器
前言 今天把最近的一个应用做好了,测试了一下运行没有问题,剩下的就是检验一下结果如何.从光谱到Lab值通常使用matlab中的roo2lab(),不过经过我最近的测试发现转换的结果并不理想,而且这个转 ...
- python 福利_发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!...
对于Python的自动化测试或者是爬虫开发者来说,对于selenium库想必都听说过,selenium本身是作为Web应用测试工具,但是作为爬虫工具也有很广泛的用途. Selenium虽然好用,但是它 ...
- 爬虫神器 Pyppeteer 介绍及爬取某商城实战!
提起 selenium 想必大家都不陌生,作为一款知名的 Web 自动化测试框架,selenium 支持多款主流浏览器,提供了功能丰富的API 接口,经常被我们用作爬虫工具来使用. 但是 seleni ...
最新文章
- oracle 12C(12.2.0.1)安装-plm系统(一)
- pytorch笔记 torch.clamp(截取上下限)
- 应云而生,幽灵的威胁 - 云原生应用交付与运维的思考
- segment fault
- APP运营如何找到精准用户,提升品牌知名度
- Docker Java+Tomcat 环境搭建
- enum与int、String之间的转换
- 冒泡排序法:一维数组 (最费内存资源的排序法)
- 找零兑换(递归解法)
- IOS AppUI规格指南
- linux内核的配置过程,linux内核的配置机制及其编译过程
- Visual C#中父窗口和子窗口之间实现控件互操作
- 树莓派之安装dlna服务
- PADS(4)——PADS Logic原理图设计技巧
- 半导体芯片行业的运作模式(IDM/Fabless/Foundry模式)
- Electronic Commerce 12th Gary Schneider
- RN通信底层原理 -- 总结篇
- 三分频电路Verilog设计
- Log4cplus编译
- 【图像分割】基于布谷鸟算法实现二维Tsallis熵、kapur、oust多阈值图像分割附matlab代码
热门文章
- ES更新嵌套数组(使用Java API)
- 00_设计模式6大原则
- ES6对象(3):类的继承
- xp系统怎么关dhcp服务器,怎样解决Win XP操作系统DHCP故障:获取未使用的IP地址
- 回调java 简书_web3j函数回调使用详解
- MongoDB数据库(了解MongoDB及基础命令,备份数据库)
- Linux简介之——目录与文件管理
- 关于 $ Super $ $ 和 $ Sub $ $ 的用法
- OBD技术速成——J1850协议解析软件实现
- server2008 sql 账号只读权限_SQL Server 2008数据库创建用户只读权限的两种方式(转载)...