Python 爬虫之Cookie

1.Cookie定义

当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你。 Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie来辨认使用者。

2.Cookie机制

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间

3.Cookielib使用

cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它们的关系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar
示例代码

import urllib2
import cookielib
cookie = cookielib.CookieJar()
processor=urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(processor)
response = opener.open('http://www.baidu.com')
for item in cookie:
    print 'Name = '+item.name
    print 'Value = '+item.value

运行结果如下

Name = BAIDUID
Value = 7581CB08339565545E3B081C00679E8B:FG=1
Name = BIDUPSID
Value = 7581CB08339565545E3B081C00679E8B
Name = H_PS_PSSID
Value = 1440_19036_21104_17001
Name = PSTM
Value = 1490239291
Name = BDSVRTM
Value = 0
Name = BD_HOME
Value = 0

同样,可以把结果保存在本地文档中,代码如下

import urllib2
import cookielib

filename = 'cookie.txt'

cookie = cookielib.MozillaCookieJar(filename)

processor=urllib2.HTTPCookieProcessor(cookie)

opener = urllib2.build_opener(processor)

response = opener.open('http://www.baidu.com')

cookie.save(ignore_discard=True,ignore_expires=True)

这样便在同文件下,获得cookie.txt

cookie.txt.png

推荐阅读更多精彩内容