requests
requests模块主要用于发送请求获取响应,该模块有很多的替代模块,比如说urllib模块,但是在工作中用的最多的还是requests模块,requests的代码简洁易懂,相对于臃肿的urllib模块,使用requests编写的爬虫代码将会更少,而且实现某一功能将会简单。
# 发送get请求
import requests
url = 'https://www.baidu.com'
response = requests.get(url)
response.encoding = 'utf8' # 如果不设置编码格式,会输出乱码
print(response.text)
- response.text是requests模块按照chardet模块推测出的编码字符集进行解码的结果
- 网络传输的字符串都是bytes类型的,所以response.text=response.content.decode('推测出的编码字符集‘)
- 我们可以在网页源码中搜索 charset,尝试参考该编码字符集,注意存在不准确的情况
response.text和response.content
- text
- 类型:str
- 解码类型:有根据的推测的文本编码
- content
- 类型:bytes
- 解码类型:没有指定
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
# 手动设定编码格式
response. encoding = 'utf8
# 打印源码的str类型数据
print(response.text)
# print(response.encoding)
# response.content是存储的bytes类型的响应源码,可以进行decode操作
print(response.content.decode())
response响应对象的其他常用属性和方法
- response.ur1 响应的url;有时候响应的url和请求的url并不一致
- response.status_code 响应状态码
- response.request.headers 响应对应的请求头
- response.headers 响应头
- response.request ._ cookies 响应对应请求的cookie;返回cookieJar类型
- response.cookies 响应的cookie(经过了set-cookie动作;返回cookieJar类型
- response.json()自动将json字符串类型的响应内容转换为python对象(dict or list)
一、headers参数的使用
理论:headers用于模拟浏览器请求,设置User-Agent、Accept-Language等字段以绕过反爬机制。
参数说明:在请求方法中通过headers={}传递字典。
代码案例:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept-Language": "en-US"
}
response = requests.get("https://example.com", headers=headers)
注意事项:
- 必须设置
User-Agent,否则可能被服务器拒绝。 - 部分网站需要特定Header字段(如
Referer)。
二、发送带参数的请求
理论:通过URL参数传递数据(如搜索关键字),使用params参数自动编码。
参数说明:在请求方法中通过params={}传递字典。
代码案例:
params = {"key1": "value1", "key2": "value2"}
response = requests.get("https://example.com/api", params=params)
在url直接添加参数
url = "https://example.com/api/s?wb=python"
response = requests.get(url)
注意事项:
- 参数会自动转换为URL编码格式(如空格转为
%20)。
三、headers中携带cookie
理论:直接在headers中设置Cookie字段传递cookie(不推荐,建议使用cookies参数)。
代码案例:
python
复制
headers = {"Cookie": "name=value; name2=value2"}
response = requests.get("https://example.com", headers=headers)
注意事项:
- 需手动拼接多个cookie,易出错,建议优先使用
cookies参数。
四、cookies参数的使用
理论:通过cookies参数传递字典或CookieJar对象,更规范地管理cookie。
参数说明:在请求方法中通过cookies={}传递字典。
代码案例:
cookies = {"session_id": "123456"}
response = requests.get("https://example.com", cookies=cookies)
注意事项:
- 字典格式需为
{"name": "value"},多个cookie自动合并。
五、cookieJar的转换方法
理论:CookieJar是requests处理cookie的标准对象,可与字典互相转换。
代码案例:
from requests.utils import cookiejar_from_dict, dict_from_cookiejar
# 字典 → CookieJar
cookie_dict = {"user": "admin"}
cookie_jar = cookiejar_from_dict(cookie_dict)
# CookieJar → 字典
response = requests.get("https://example.com")
cookies = dict_from_cookiejar(response.cookies)
注意事项:
response.cookies返回的是CookieJar对象。
六、超时参数timeout的使用
理论:设置请求超时时间(秒),防止长时间无响应。
参数说明:通过timeout=5设置总超时时间。
代码案例:
try:
response = requests.get("https://example.com", timeout=5)
except requests.exceptions.Timeout:
print("请求超时!")
注意事项:
- 超时后需捕获
Timeout异常。
七、代理ip参数proxies的使用
理解使用代理的过程
1.代理ip是一个ip,指向的是一个代理服务器
2.代理服务器能够帮我们向目标服务器转发请求

正向代理与反向代理的区别
前边提到proxy参数指定的代理ip指向的是正向的代理服务器(是指浏览器知道应该发给哪个服务器,反之是反向),那么相应的就有反向服务器;现在来了解
一下正向代理服务器和反向代理服务器的区别
1.从发送请求的一方的角度,来区分正向或反向代理
2.为浏览器或客户端(发送请求的一方)转发请求的,叫做正向代理
。浏览器知道最终处理请求的服务器的真实ip地址,例如VPN
3.不为浏览器或客户端(发送请求的一方)转发请求、而是为最终处理请求的服务器转发请求的,叫做反
向代理
。浏览器不知道服务器的真实地址,例如nginx
理论:通过代理服务器转发请求,隐藏真实IP。
参数说明:通过proxies={"http": "http://ip:port", "https": "https://ip:port"}设置。
代码案例:
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080"
}
response = requests.get("https://example.com", proxies=proxies)
# 代理使用成功不会有任何报错,能成功获取响应
# 如果失败,要么卡滞,要么报错
免费代理:https://www.kuaidaili.com/free/
注意事项:
- 代理需支持HTTP/HTTPS协议,免费代理可能不稳定。
八、使用verify参数忽略CA证书

理论:跳过SSL证书验证(用于测试环境)。
参数说明:设置verify=False。
代码案例:
response = requests.get("https://example.com", verify=False)
import requests
url = 'https://sam. huat.edu.cn:8443/selfservice/
response = requests.get(url, verify=False) # 直接跳过证书验证
print(response.content)
注意事项:
- 生产环境不建议禁用,可能导致中间人攻击。
九、发送POST请求
思考:哪些地方我们会用到POST请求?
1.登录注册(在web工程师看来POST比GET更安全,url地址中不会暴露用户的账
号密码等信息)
2.需要传输大文本内容的时候(POST请求对数据长度没有要求)
理论:向服务器提交表单或JSON数据。
参数说明:通过data或json参数传递数据。
代码案例:
# 表单数据
data = {"key1": "value1", "key2": "value2"}
response = requests.post("https://example.com/post", data=data)
# JSON数据
json_data = {"name": "Alice", "age": 25}
response = requests.post("https://example.com/api", json=json_data)
post的数据来源
- 固定值
- 输入值
- 预设值-静态文件
- 预设值-发请求
- 客户端生成
注意事项:
- 使用
json=会自动设置Content-Type为application/json。
十、利用requests.session进行状态保持
session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器的时候,会带上前一次的cookie
理论:通过Session对象持久化cookie和TCP连接,提升效率。
- requests.session的作用
- 自动处理cookie,即下一次请求会带上前一次的cookie
- requests.session的应用场景
- 自动处理连续的多次请求过程中产生的cookie
代码案例:
- 自动处理连续的多次请求过程中产生的cookie
session = requests.Session()
# 登录并保持状态
session.post("https://example.com/login", data={"user": "admin"})
# 后续请求自动携带cookie
response = session.get("https://example.com/dashboard")
注意事项:
- Session需手动关闭(或使用
with语句),避免资源泄漏。
浙公网安备 33010602011771号