我们在使用爬虫的时候,经常会用到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()
。
登录人人网
from urllib import request,parse,error
from http import cookiejar
cookie = cookiejar.CookieJar()
opener = request.HTTPCookieProcessor(cookie)
opener = request.build_opener(opener)
base_url = "https://www.renren.com/PLogin.do" # 登陆页面
post = {
'email':'',
'password':''
}
head = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64)"}
post1= parse.urlencode(post)
print(post1)
res = request.Request(base_url,data=bytes(post1,encoding="utf-8"),headers=head)
print(res)
res = opener.open(res)
print(res)
a = res.read().decode("utf-8")
with open("renren.html","w",encoding="utf-8") as f:
f.write(a)