Python爬虫中session.get(url, headers)和requests.get(url, headers)有什么区别?
import requests
# 实例化 session
session = request.session()
response = session.get(url,headers)
# 直接是使用
response = requests.get(url,headers)
这两者有什么区别呀???
Python爬虫中session.get(url, headers)和requests.get(url, headers)有什么区别?
2 回复
简单说,requests.get() 是发一次性的独立请求,而 session.get() 是用一个会“记住”东西的会话对象来发请求。
关键区别在于这个会话对象(requests.Session() 的实例)。你创建一个 session 后,用它发请求,它会自动帮你处理一些需要保持状态的事情:
- Cookie持久化:服务器返回的Cookie会被自动保存在这个
session里,并在后续所有用这个session发的请求中自动带上。用独立的requests.get()则每次都是“重新开始”。 - 连接复用:同一个
session发出的多个请求可以复用底层的TCP连接,这在需要爬取同一个网站的大量页面时,能稍微提升点速度。 - 参数持久化:你可以给
session统一设置headers,auth,proxies等参数,之后用这个session发的所有请求都会自动带上这些设置,不用每次都写一遍。
举个例子,模拟登录后访问受保护页面:
import requests
# 方法1: 用独立的 requests.get() —— 会失败,因为第二次请求没带上登录后的cookie
resp1 = requests.post('https://example.com/login', data={'user': 'name', 'pass': 'word'})
print(resp1.cookies) # 这里能看到服务器返回的cookie
resp2 = requests.get('https://example.com/dashboard') # 这次请求没带上面的cookie,访问不了
# print(resp2.status_code) # 可能是401或302跳回登录页
# 方法2: 用 session —— 能成功
session = requests.Session() # 创建会话
session.post('https://example.com/login', data={'user': 'name', 'pass': 'word'}) # 登录,cookie自动存入session
resp3 = session.get('https://example.com/dashboard') # 用同一个session发请求,自动带上cookie
# print(resp3.status_code) # 200,成功访问
总结一下怎么选:
- 爬单个页面或者请求之间不需要保持状态(比如Cookie、特定Header) -> 直接用
requests.get(),简单。 - 需要模拟登录、爬取同一个网站多个页面、或者要保持会话状态 -> 创建
requests.Session(),然后用session.get()。
一句话建议:要维持状态(如登录)就用session,否则直接用requests。
看过文档了吗?最显像的特征就是能保留 cookie,对同一个主机的请求可以复用 TCP 连接从而提升速度。

