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 后,用它发请求,它会自动帮你处理一些需要保持状态的事情:

  1. Cookie持久化:服务器返回的Cookie会被自动保存在这个 session 里,并在后续所有用这个 session 发的请求中自动带上。用独立的 requests.get() 则每次都是“重新开始”。
  2. 连接复用:同一个 session 发出的多个请求可以复用底层的TCP连接,这在需要爬取同一个网站的大量页面时,能稍微提升点速度。
  3. 参数持久化:你可以给 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 连接从而提升速度。

回到顶部