HttpRequest
抓取流地址
Request模块
安装
1
2
3
4
pip3 install requests
#使用
import requests
Response = Request.ger(url)会返回一个Response对象。
例:
1
2
3
url = "https://www.huya.com/captainmo"
a = request.get(url) #a就是Response
print(a.status_code)
Response包含多个属性:
- status_code:HTTP响应状态码.
- text:会尝试按照响应头中指定的字符编码来解码响应内容,并返回一个包含文本信息的字符串,文本形式,包含服务器返回的HTML、JSON或其它文本数据.
- content:响应内容的二进制形式,适用俞处理费文本数据,如图片或而文件.
- headers:字典形式的响应头信息,包含服务器返回的各种元数据.
- url:用于检查是否发生了重定向.
- json():将响应内容解析为JSON格式。如果响应内容是JSON数据,可以使用此方法获取解析后的Python对象.
Python中解析器
安装
1
pip3 install lxml
Beautiful Soup 支持的解析器:
- html.parser
- lxml
- xml
- html5lib
BeautifulSoup4中的一些方法
安装
1
2
3
4
pip3 install beautifulsoup4
#使用
from bs4 import BeautifulSoup
Hashlib模块(哈希函数)
什么是哈希函数
哈希函数是对明文进行转换的一种方式。它们生成的哈希值是固定长度的二进制数据,通常以十六进制或 Base64 编码的形式表示。哈希函数将输入数据(明文)转换为固定长度的哈希值,这个过程是不可逆的。不同的输入会产生不同的哈希值,但相同的输入始终产生相同的哈希值
用途特性:
-
数据完整性验证:
哈希值可以用于验证数据的完整性。通过比较数据的哈希值,可以确定数据是否在传输或存储过程中被篡改。即使只有一个字节的变化,都会导致哈希值的显著变化。
假设有一份原始数据,我们计算其哈希值并记录下来。如果有人在原始数据上进行了修改,不管是改变了一个字节还是整个文件,都将导致修改后的数据与原始数据的哈希值不同。通过比较存储的原始数据的哈希值和当前数据的哈希值,我们可以轻松地检测到数据是否被篡改。
-
密码存储:
在用户注册时,系统通常会将用户密码的哈希值存储在数据库中而不是明文密码。当用户尝试登录时,系统会将输入密码的哈希值与存储在数据库中的哈希值进行比较,而不是直接比较明文密码。
-
数字签名:
哈希值与私钥结合使用,可以生成数字签名,用于验证文件的来源和完整性。数字签名通常用于确保文件在传输过程中未被篡改。
-
散列表:
在数据结构中,哈希函数用于生成散列值,用于快速检索和存储数据,例如哈希表。
-
文件去重:
哈希值可用于快速比较文件内容,以确定文件是否与其他文件相同,从而实现文件去重。
-
安全摘要:
哈希值可以用于生成消息摘要,用于存储敏感信息的摘要而不是明文,以增加安全性。
什么是哈希碰撞?
在密码学和哈希函数的上下文中,”碰撞”指的是两个不同的输入产生相同的哈希值。理想情况下,每个唯一的输入都应该映射到一个唯一的哈希值,但由于哈希函数输出是固定长度的,而输入是无限的,存在不同的输入可能产生相同的输出的可能性,这就是碰撞。
hashlib包含了多种哈希函数或者说是哈希算法
常见的哈希函数:
-
MD5 (Message Digest Algorithm 5):
128 位哈希值
已经被证明存在碰撞攻击风险,不再推荐用于安全应用
-
SHA-1 (Secure Hash Algorithm 1):
160 位哈希值
与 MD5 类似,存在碰撞攻击风险,不再推荐用于安全应用
-
SHA-224:
224 位哈希值
SHA-256 的截断版本
-
SHA-256:
256 位哈希值
广泛用于安全应用,如密码存储和数字签名
-
SHA-384:
384 位哈希值
SHA-512 的截断版本
-
SHA-512:
512 位哈希值
用于需要更高安全性的应用,如数字证书
-
SHA-3 (Keccak):
基于 Keccak 算法,提供了不同的设计与 SHA-2 系列
支持多种输出长度,如 SHA3-224、SHA3-256、SHA3-384、SHA3-512 等
-
Whirlpool:
512 位哈希值
设计用于密码学安全,但相对较慢