Python爬虫:Session、Cookie、JWT

当你在Python中进行网络爬虫时,需要处理会话(Session)、Cookie和JWT(JSON Web Token)时,以下是更详细的介绍和示例:

Session(会话):

会话用于维护用户的状态和跟踪他们的活动,通常在登录和跨多个页面请求之间非常有用。Python中使用requests库来创建和管理会话:

python 复制代码
import requests

# 创建一个会话对象
session = requests.Session()

# 在会话中发送GET请求
response = session.get('https://example.com')

# 在会话中保持登录状态
login_data = {'username': 'your_username', 'password': 'your_password'}
session.post('https://example.com/login', data=login_data)

# 使用同一会话发送后续请求
response = session.get('https://example.com/dashboard')

使用会话,你可以跨多个请求共享Cookie和其他会话数据,以便保持登录状态。

Cookie:

Cookie是一种用于在客户端和服务器之间传递数据的机制。在爬虫中,你可以发送包含Cookie的HTTP请求以模拟已登录的用户。首先,你需要获取登录后的Cookie:

python 复制代码
import requests

# 发送登录请求并获取Cookie
login_data = {'username': 'your_username', 'password': 'your_password'}
response = requests.post('https://example.com/login', data=login_data)

# 获取响应中的Cookie
cookies = response.cookies

# 使用获取的Cookie发送请求
response = requests.get('https://example.com/dashboard', cookies=cookies)

在此示例中,我们首先发送登录请求,然后从响应中提取Cookie,并将其包含在后续请求中。

JWT(JSON Web Token):

JWT是一种用于身份验证和授权的令牌,通常包含在HTTP请求的头部中。要在Python中使用JWT进行身份验证,你需要获取有效的令牌,并将其包含在请求头中:

python 复制代码
import requests

# 获取JWT令牌
jwt_token = 'your_jwt_token'

# 创建请求头,包含JWT令牌
headers = {'Authorization': f'Bearer {jwt_token}'}

# 发送包含JWT令牌的请求
response = requests.get('https://example.com/protected_resource', headers=headers)

JWT令牌通常包括在Authorization请求头中,前缀为"Bearer"。

代码案例

python 复制代码
from urllib.parse import urljoin
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time

BASE_URL = 'https://login2.scrape.center/'
LOGIN_URL = urljoin(BASE_URL, '/login')
INDEX_URL = urljoin(BASE_URL, '/page/1')
USERNAME = 'admin'
PASSWORD = 'admin'

browser = webdriver.Chrome()
browser.get(BASE_URL)
browser.find_element(By.CSS_SELECTOR, 'input[name="username"]').send_keys(USERNAME)
browser.find_element(By.CSS_SELECTOR, 'input[name="password"]').send_keys(PASSWORD)
browser.find_element(By.CSS_SELECTOR, 'input[type="submit"]').click()
time.sleep(10)

# get cookies from selenium
cookies = browser.get_cookies()
print('Cookies', cookies)
browser.close()

# set cookies to requests
session = requests.Session()
for cookie in cookies:
    session.cookies.set(cookie['name'], cookie['value'])

response_index = session.get(INDEX_URL)
print('Response Status', response_index.status_code)
print('Response URL', response_index.url)

请注意,使用爬虫技术时,务必遵守目标网站的规定和政策。不当使用爬虫可能导致法律问题,因此请确保你的爬虫活动合法,并尊重网站的Robots.txt文件和使用条款。

相关推荐
starrysky81043 分钟前
zipfile 中文乱码修复:把已知 GBK 旧 ZIP 解压到正确中文目录
python
用户91294046848421 小时前
Codex 从零到能交付(09):让 Codex 写有用的测试,而不是只测成功路径
python
2601_967987371 小时前
Debian如何配置Python调试工具
python·debian·pdb·调试工具·ipdb
MoRay1 小时前
放弃云端 Computer Use,我用 Python 手搓了一个带“物理防呆”的本地 GUI Agent 底座
python·github
H.莓飛2 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:Bellman-Ford与SPFA含负权最短路及负环检测全解析
c++·python·算法·bfs·信息学竞赛
小小张说故事3 小时前
Python 的 __init__ 到底是不是构造函数?拆开 __new__ 先造对象、那次被跳过的初始化和必须返回 None 的规矩
python
拖累斯3 小时前
Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」
python·jenkins·bug
j7~3 小时前
【C++ 八股文】(篇四)C++11 新特性
开发语言·c++·面试·c++11·八股文
eggwyw3 小时前
C++中大括号的用法合集
开发语言·c++