首页
技术小册
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网络爬虫开发实战(上)
### 10.3 基于JWT的模拟登录爬取实战 在网络爬虫的开发过程中,遇到需要登录后才能访问的数据时,模拟登录成为了一个关键步骤。传统的表单登录通过发送用户名和密码到服务器,服务器验证后返回登录状态(如Cookie)给客户端。然而,随着Web技术的发展,JSON Web Tokens(JWT)因其简洁性、自包含性以及无需服务器存储状态信息等优势,在现代Web应用中得到了广泛应用。本章节将详细讲解如何基于JWT实现模拟登录以爬取需要登录权限的数据。 #### 10.3.1 JWT基础概念 **JSON Web Tokens(JWT)** 是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。JWT由头部(Header)、负载(Payload)、签名(Signature)三部分组成,通过点(`.`)分隔成三部分。 - **Header**:通常包含了两部分信息:令牌的类型(`typ`),这里是JWT;以及使用的签名算法(`alg`),如HMAC SHA256或RSA。 - **Payload**:包含了声明(Claims),声明是关于实体(通常是用户)和其他数据的声明。声明分为三种类型:注册声明(Registered claims)、公共声明(Public claims)、私有声明(Private claims)。常见的注册声明包括`iss`(发行人)、`exp`(过期时间)、`sub`(主题)等。 - **Signature**:是对上述两部分进行签名,以防止数据被篡改。使用指定的算法和密钥,将Header和Payload的编码后进行签名。 #### 10.3.2 JWT在Web应用中的使用 在Web应用中,JWT常用于身份验证和信息交换。当用户登录时,服务器验证用户身份后,不是返回一个传统的Session ID,而是生成一个JWT并将其发送给客户端。客户端在后续的请求中,将JWT放在HTTP请求的Authorization头部的Bearer模式中发送给服务器,服务器验证JWT的有效性后,即可识别用户身份并处理请求。 #### 10.3.3 实战步骤 ##### 1. 分析登录流程 首先,需要分析目标网站的登录流程,确定JWT是如何生成和传递的。通常,可以通过浏览器的开发者工具(如Chrome的Network标签页)来观察登录请求和响应。注意查找包含JWT的响应头或响应体。 ##### 2. 构造登录请求 根据分析结果,使用Python的HTTP请求库(如`requests`)构造登录请求。请求中需要包含用户名、密码等必要信息,并设置适当的请求头(如`Content-Type`为`application/json`或`application/x-www-form-urlencoded`,根据API要求)。 ```python import requests url = 'https://example.com/login' headers = { 'Content-Type': 'application/json' } data = { 'username': 'your_username', 'password': 'your_password' } response = requests.post(url, headers=headers, json=data) ``` ##### 3. 解析JWT 登录成功后,服务器通常会在响应中返回JWT。这个JWT可能位于响应头(如`Authorization`)、响应体或Cookies中。需要根据实际情况提取JWT。 ```python if response.status_code == 200: jwt = response.json().get('token') # 假设JWT在响应体的'token'字段中 if jwt: print("JWT获取成功:", jwt) else: print("登录成功但未找到JWT") else: print("登录失败:", response.text) ``` ##### 4. 使用JWT进行后续请求 获取到JWT后,就可以在后续的请求中将其作为授权凭证了。这通常通过将JWT添加到请求的`Authorization`头部实现,格式为`Bearer <token>`。 ```python protected_url = 'https://example.com/protected_resource' headers = { 'Authorization': f'Bearer {jwt}', 'Content-Type': 'application/json' } response = requests.get(protected_url, headers=headers) if response.status_code == 200: print("成功访问受保护资源:", response.json()) else: print("访问受保护资源失败:", response.text) ``` ##### 5. 处理JWT过期 JWT通常包含过期时间(`exp`),如果JWT过期,服务器将拒绝访问。在编写爬虫时,需要处理JWT过期的情况,如通过重新登录获取新的JWT。 ```python def refresh_jwt(): # 重新登录逻辑,同前面构造登录请求部分 pass # 在需要的地方检查JWT是否过期,并可能刷新JWT # 这里只是一个简单的示例,实际项目中可能需要更复杂的逻辑 if jwt_is_expired(jwt): # 假设有一个函数可以检查JWT是否过期 jwt = refresh_jwt() ``` #### 10.3.4 注意事项 1. **遵守法律法规**:在编写爬虫时,务必遵守目标网站的`robots.txt`文件以及相关法律法规,尊重网站的版权和隐私政策。 2. **请求频率控制**:合理控制请求频率,避免给目标网站服务器带来过大压力。 3. **错误处理**:增加错误处理逻辑,如处理网络异常、登录失败等情况。 4. **安全性**:在存储和传输JWT时,要注意安全性,避免泄露敏感信息。 #### 10.3.5 总结 基于JWT的模拟登录是爬取需要登录权限数据的一种有效方式。通过了解JWT的基本概念和流程,结合Python的HTTP请求库,我们可以轻松实现模拟登录并访问受保护资源。然而,在编写爬虫时,还需要注意遵守相关法律法规,合理控制请求频率,并妥善处理各种异常情况。希望本章节的内容能对你的Python网络爬虫开发实战有所帮助。
上一篇:
10.2 基于Session和Cookie的模拟登录爬取实战
下一篇:
10.4 大规模账号池的搭建
该分类下的相关小册推荐:
Python与办公-玩转PDF
Python数据分析与挖掘实战(下)
Python机器学习实战
Python神经网络入门与实践
Python合辑6-字典专题
剑指Python(磨刀不误砍柴工)
Python与办公-玩转PPT
Python爬虫入门与实战开发(上)
Python合辑7-集合、列表与元组
机器学习算法原理与实战
Python合辑3-字符串用法深度总结
Python编程轻松进阶(三)