文章目录
Cookie状态管理
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理
Cookie和Session都用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题所做的努力。对于爬虫开发来说,我们更加关注的是Cookie,因为Cookie将状态保存在客户端,Session将状态保存在服务器端
Cookie实际上是一小段的文本信息
Cookie是服务器在本地机器(客户端)上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送Cookie,浏览器则会解析这些Cookie并将它们保存为一个本地文件,它会自动将同一服务器的任何请求绑定上这些Cookie
客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Session是另一种记录客户状态的机制
Cookie的工作方式:服务器给每个Session分配一个唯一的JESSION-ID,并通过Cookie发送给客户端。当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session
不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了
Cookie处理
在爬虫的时候,经常进行模拟登陆和访问,这时我们需要使用http.cookjar和url.request这两个模块
其中只要使用url.cookjar中的CookieJar类,以及url.request中的HTTPCookieProcessor方法
http.cookjar 模块: 主要作用是提供用于存储cookie的对象
HTTPCookieProcessor处理器:主要作用是处理这些cookie对象,并构建handle对象
CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar
- CookieJar:管理HTTP cookie值、它从HTTP请求中提取cookie并存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失
- FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据
- MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例
- LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例
其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCookieJar()
使用CookieJar获取cookie值
需求:访问百度首页,获取访问的cookie
import urllib.request
import http.cookiejar
# 构建一个CookieJar对象实例来保存cookie
cookiejar = http.cookiejar.CookieJar()
# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为cookieJar()对象
handle = urllib.request.HTTPCookieProcessor(cookiejar)
# 通过build_opener()来构建opener
opener = urllib.request.build_opener(handle)
# 以get方法访问页面,访问之后会自动保存cookie到cookiejar中
opener.open("http://www.baidu.com")
# 可以按标准格式将保存的cookie打印出来
cookieStr = ''
for item in cookiejar:
cookieStr = cookieStr + item.name

本文介绍了Cookie作为HTTP无状态解决方案的工作原理,对比了Cookie和Session的区别。在Python爬虫中,Cookie处理通常涉及HTTPCookieProcessor和CookieJar类,如FileCookieJar、MozillaCookieJar和LWPCookieJar。通过示例展示了如何获取、保存和使用Cookie来模拟登录及后续访问。
最低0.47元/天 解锁文章
2032

被折叠的 条评论
为什么被折叠?



