首页
技术小册
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.2 Splash 的使用 在Python网络爬虫的开发过程中,面对日益复杂的网页结构和丰富的JavaScript渲染内容,传统的请求-响应模式往往难以直接获取到页面上的动态数据。为了克服这一挑战,开发者们探索了多种解决方案,其中Splash作为一款基于JavaScript的渲染引擎,因其高效、灵活且易于集成到Python爬虫项目中而备受青睐。本章将详细介绍Splash的安装、配置及其在Python3网络爬虫开发中的实战应用。 #### 7.2.1 Splash简介 Splash是一个JavaScript渲染服务,它内部集成了WebKit浏览器引擎,可以执行JavaScript脚本并返回渲染后的HTML内容,非常适合用于爬取那些需要JavaScript执行才能完整显示的网页数据。Splash通过HTTP API接收请求,支持多种编程语言的客户端调用,包括Python。 Splash的核心优势在于: - **完整的JavaScript支持**:能够处理复杂的JavaScript渲染页面。 - **资源控制**:允许用户设置页面加载超时、资源加载限制等,提高爬虫效率。 - **脚本执行**:支持Lua脚本,用于更灵活地控制页面渲染过程。 - **视觉化调试**:提供HAR(HTTP Archive)文件生成功能,便于分析HTTP请求。 #### 7.2.2 Splash的安装与配置 ##### 安装Docker(可选) 由于Splash的运行依赖于复杂的依赖关系,直接使用Docker来安装和管理Splash是一个简便且高效的方法。Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。如果尚未安装Docker,请参照Docker官网指南进行安装。 ##### 使用Docker运行Splash 1. **拉取Splash镜像**: ```bash docker pull scrapinghub/splash ``` 2. **运行Splash容器**: ```bash docker run -d -p 8050:8050 scrapinghub/splash ``` 这条命令将Splash容器运行在后台,并将容器的8050端口映射到宿主机的8050端口上,方便外部访问。 3. **验证Splash是否运行成功**: 在浏览器中访问`http://localhost:8050/`,如果看到Splash的欢迎页面,则表示Splash已成功运行。 ##### Python环境准备 确保你的Python环境中已安装`requests`和`scrapy-splash`(如果你使用的是Scrapy框架)或其他适合HTTP请求的库。 ```bash pip install requests # 如果使用Scrapy pip install scrapy-splash ``` #### 7.2.3 Splash的API使用 Splash提供了一套丰富的HTTP API,允许用户通过发送HTTP请求来执行各种操作。以下是一些常用的API接口介绍: - **`/render.html`**:渲染URL并返回HTML内容。 - **`/render.png`**、**`/render.jpeg`**等:渲染URL并返回图片。 - **`/execute`**:执行Lua脚本。 - **`/lua_source`**:上传Lua脚本文件。 ##### 示例:使用Splash渲染JavaScript动态页面 假设我们需要爬取一个需要JavaScript渲染的网页内容,可以使用Splash的`/render.html` API。以下是一个使用Python的`requests`库向Splash发送请求的示例: ```python import requests import json url = 'http://example.com/javascript_rendered_page' splash_url = 'http://localhost:8050/render.html' headers = { 'Content-Type': 'application/json', } data = { 'url': url, 'timeout': 30, # 设置超时时间 'wait': 2, # 等待页面加载时间 'args': { 'lua_source': """ function main(splash, args) assert(splash:go(args.url)) assert(splash:wait(args.wait)) return { html = splash:html(), png = splash:png(), har = splash:har(), } end """ } } response = requests.post(splash_url, headers=headers, data=json.dumps(data)) result = response.json() # 打印渲染后的HTML内容 print(result['html']) # 如果需要,也可以保存图片或分析HAR文件 # with open('page.png', 'wb') as f: # f.write(result['png']) ``` 注意:上述示例中的Lua脚本部分用于控制Splash的渲染过程,包括访问指定URL、等待页面加载等。Lua脚本的强大之处在于它允许你执行复杂的逻辑来控制页面的渲染,比如模拟用户交互、处理AJAX请求等。 #### 7.2.4 实战应用 在实际应用中,Splash可以极大地提升爬虫的效率和灵活性。以下是一些典型的应用场景: - **爬取动态加载的数据**:如电商平台上的商品信息、社交网站上的用户动态等。 - **处理JavaScript生成的验证码**:虽然Splash本身不直接支持验证码识别,但可以通过模拟用户操作(如点击、输入)来触发验证码的生成,然后结合OCR技术进行识别。 - **模拟用户登录**:对于需要JavaScript支持的登录页面,Splash可以模拟用户填写表单、提交请求等登录过程。 - **爬取JavaScript加密的数据**:有些网站会在客户端使用JavaScript对数据进行加密处理后再发送给服务器,Splash可以执行这些JavaScript代码,从而获取到加密前的原始数据。 #### 7.2.5 注意事项 - **性能问题**:Splash的渲染过程相对较慢,特别是在处理大型网站或复杂页面时,可能会显著增加爬虫的响应时间。因此,在设计爬虫策略时,需要合理控制并发请求的数量和频率。 - **资源限制**:Splash运行时会占用一定的系统资源(如CPU、内存等),在部署时需要根据实际需求进行配置。 - **版权与合规性**:在使用Splash进行网页爬取时,务必遵守相关法律法规和网站的使用协议,尊重网站的数据版权和隐私政策。 #### 结语 Splash作为一款强大的JavaScript渲染服务,为Python网络爬虫的开发提供了有力的支持。通过本章的学习,我们了解了Splash的基本概念、安装配置方法以及API的使用方式,并探讨了其在实战中的应用场景和注意事项。希望这些内容能够帮助你更好地利用Splash来应对复杂的网页爬取任务。
上一篇:
7.1 Selenium 的使用
下一篇:
7.3 Pyppeteer 的使用
该分类下的相关小册推荐:
Python甚础Django与爬虫
Python机器学习基础教程(上)
Python合辑12-面向对象
Python合辑3-字符串用法深度总结
Python编程轻松进阶(四)
机器学习算法原理与实战
Python编程轻松进阶(一)
Python合辑2-字符串常用方法
Python合辑10-函数
Python与办公-玩转PPT
Python合辑14-面向对象编程案例(下)
Python数据分析与挖掘实战(上)