首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 7.6 Pyppeteer 爬取实战 在Python的爬虫世界中,除了传统的基于请求库(如requests、urllib)和解析库(如BeautifulSoup、lxml)的爬虫方式外,还有一种更为强大且灵活的方法——使用无头浏览器(Headless Browser)进行网页内容的抓取与交互。Pyppeteer,作为Puppeteer的Python封装,允许Python开发者利用Chrome或Chromium浏览器的强大功能,包括JavaScript执行、页面渲染、模拟用户行为等,来执行复杂的网络爬虫任务。本章将深入介绍如何使用Pyppeteer进行网络爬取实战。 #### 7.6.1 Pyppeteer简介 Pyppeteer是一个基于Puppeteer的Python库,Puppeteer是Google Chrome团队开发的一个Node库,用于通过DevTools协议控制Chrome或Chromium。Pyppeteer通过WebSocket与Chrome浏览器通信,实现了在Python环境中对浏览器的控制。这使得Python开发者能够编写脚本以自动化浏览器操作,如页面导航、截图、PDF生成、执行JavaScript代码等,非常适合于需要处理动态内容或JavaScript渲染内容的网页爬取。 #### 7.6.2 环境搭建 在开始使用Pyppeteer之前,需要确保你的Python环境已经安装好,并且安装了必要的依赖库。由于Pyppeteer依赖于Node.js和Chromium(或Chrome),因此安装过程相对复杂一些。 1. **安装Node.js**:访问[Node.js官网](https://nodejs.org/)下载并安装最新稳定版Node.js。 2. **安装Python库**:通过pip安装`pyppeteer`和`asyncio`(如果Python版本低于3.7,则`asyncio`已内置)。 ```bash pip install pyppeteer ``` 注意:由于Pyppeteer需要下载Chromium浏览器,安装过程中可能会自动下载,或者需要手动指定Chromium的路径。 3. **配置环境变量**(可选):确保Node.js和Python的可执行文件路径已添加到系统的环境变量中,以便在命令行中全局访问。 #### 7.6.3 Pyppeteer基础使用 Pyppeteer的使用主要围绕`pyppeteer.launch()`函数展开,该函数用于启动浏览器实例。以下是一个简单的示例,展示如何启动浏览器、打开网页、截图并关闭浏览器。 ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://www.example.com') await page.screenshot({'path': 'example.png'}) await browser.close() asyncio.get_event_loop().run_until_complete(main()) ``` #### 7.6.4 实战案例:爬取动态加载数据 许多现代网站采用AJAX或Fetch API等技术动态加载数据,传统的HTTP请求方式无法直接获取这些数据。此时,Pyppeteer就派上了用场。以下是一个实战案例,展示如何使用Pyppeteer爬取一个动态加载数据的网页。 **目标网站**:假设有一个电商网站,其商品列表是通过AJAX请求动态加载的。 **步骤**: 1. **启动浏览器并导航到目标网页**。 2. **等待页面加载完成**:由于数据是动态加载的,需要等待页面上的某些元素(如商品列表)加载完毕。 3. **执行JavaScript代码获取数据**:使用`page.evaluate()`函数在浏览器上下文中执行JavaScript代码,以获取页面上的数据。 4. **处理并保存数据**:将获取到的数据解析并保存到本地文件或数据库中。 ```python import asyncio from pyppeteer import launch async def fetch_dynamic_data(url): browser = await launch() page = await browser.newPage() await page.goto(url, {'waitUntil': 'networkidle2'}) # 等待网络请求基本停止 # 假设商品列表的HTML元素有一个特定的类名 products_js = """ () => { let products = []; document.querySelectorAll('.product-item').forEach(item => { products.push({ title: item.querySelector('.title').innerText, price: item.querySelector('.price').innerText }); }); return products; } """ products = await page.evaluate(products_js) # 处理数据(此处仅为示例,实际应用中可能需要更复杂的处理) for product in products: print(f"Title: {product['title']}, Price: {product['price']}") await browser.close() # 调用函数 url = 'https://www.example.com/products' asyncio.get_event_loop().run_until_complete(fetch_dynamic_data(url)) ``` #### 7.6.5 注意事项与性能优化 - **资源消耗**:Pyppeteer启动的是完整的浏览器实例,相比轻量级的HTTP请求库,会消耗更多的CPU和内存资源。因此,在资源受限的环境中应谨慎使用。 - **异常处理**:网络请求、页面渲染等过程中可能会遇到各种异常,如超时、网络错误等,应合理处理这些异常,确保程序的健壮性。 - **性能优化**:对于需要频繁爬取大量数据的场景,可以通过增加并发量(使用`asyncio`的并发特性)或优化JavaScript代码来提高爬取效率。 - **遵守法律法规**:在编写爬虫时,务必遵守目标网站的`robots.txt`协议和相关法律法规,尊重网站的数据版权和隐私政策。 #### 7.6.6 总结 Pyppeteer为Python开发者提供了一种强大的工具,用于处理那些传统爬虫难以应对的动态加载网页。通过模拟真实的浏览器行为,Pyppeteer能够轻松获取到由JavaScript渲染的网页内容。然而,其资源消耗较大,且需要一定的JavaScript知识来编写高效的爬取脚本。因此,在选择使用Pyppeteer之前,应充分考虑项目的具体需求和资源限制。通过合理的规划和优化,Pyppeteer可以成为你爬虫工具箱中的一把利器。
上一篇:
7.5 Selenium 爬取实战
下一篇:
7.7 CSS 位置偏移反爬案例分析与爬取实战
该分类下的相关小册推荐:
Python合辑14-面向对象编程案例(下)
Python与办公-玩转PPT
Python合辑11-闭包函数
Python机器学习基础教程(上)
Python合辑6-字典专题
Python面试指南
Python自动化办公实战
Python高并发编程与实战
Python编程轻松进阶(一)
实战Python网络爬虫
剑指Python(磨刀不误砍柴工)
Python合辑3-字符串用法深度总结