CookieJar
我们在使用爬虫的时候,经常会用到cookie进行模拟登陆和访问。在使用urllib库做爬虫,我们需要借助http.cookiejar库中的CookieJar来实现。
CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。
CookieJar:管理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()。
# 经典实例1:
import http.cookiejar,urllib.request
filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True,ignore_expires=True)
# save()函数带有两个参数,ignore_discard和ignore_expires。
#
# ignore_discard: 即保存需要被丢弃的cookie。
# ignore_expires: 即过期的cookie也保存。
当然,如果我们对cookie有定制的需要,那么我们也要借助HTTPCookieProcess处理器来处理。
# 经典实例2:
import http.cookiejar,urllib.request
cookie = http.cookiejar.MozillaCookieJar("./cookie.txt")
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
res = opener.open("http://www.baidu.com/")
cookie.save(ignore_discard=True, ignore_expire=True)
# 将cookie存为一个文件
# cookie1 = http.cookiejar.MozillaCookieJar()
# cookie1.load('cookie1.txt')
# 从文件中读取cookie
for i in cookie:
print(i.name+"="+i.vaule)
# 经典案例3
import http.cookiejar,urllib.request
cookie = http.cookiejar.LWPCookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))
转载至链接:https://my.oschina.net/gain/blog/1931299