Cookie的使用--爬虫

在访问互联网页面时,通过无状态协议(无法维持会话之间的状态)HTTP进行。例如:我们访问需要登录的网站,可以通过两种方式存储登录状态

(1)Cookie保存会话信息,保存在客户端。 (2)Session保存会话信息,保存在服务端。通过服务端给客户端发SessionID等信息,这些信息一般存储在客户端的 Cookie中。然后,用户在访问网站时,从Cookie中读取信息,然后从服务器中的Session中根据这一部分的Cookie信息 检索出客户端所有的会话信息,然后进行会话控制。 在爬虫的登录中,如果没有Cookie,我们登录成功了一个网页,但如果我们去爬取该网站的其他网页时,仍然会是未登 录状态。有了Cookie就会保存登录状态。 我们希望登录状态一直保持,python3使用Cookiejar库进行处理

1)导入Cookie处理模块http.cookiejar

2)使用http.cookiejar.CookieJar()创建CookieJar对象

3)使用HTTPCookieProcessor创建cookie处理器,并以其为参数创建opener对象

4)创建全局默认opener对象

代码示例:

import urllib.request
import urllib.parse
import http.cookiejar
url="http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=L768q"
postdata=urllib.parse.urlencode({"username":"用户名","password":"密码"}).encode('utf-8')
req=urllib.request.Request(url,postdata)
req.add_header('')
#使用http.cookiejar.CookieJar()创建CookieJar对象
cjar=http.cookiejar.CookieJar()
#使用HTTPCookieProcesssor创建cookie处理器,并以其参数构建opener对象
opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
#将opener安装为全局
urllib.request.install_opener(opener)
file=opener.open(req)
data=file.read()
#"wb"为以二进制覆盖写,"ab"为以二进制文件末尾增加
file=open("D:/Python36/myweb/1.html","wb")
file.write(data)
file.close()
url2="http://bbs.chinaunix.net/"
data2=urllib.request.urlopen(url2).read()
fhandle=open("D:/Python36/myweb/2.html","wb")
fhandle=write(data2)
fhandle.close()

我们可以看到使用cookie后1.html和2.html保持了相同的登录状态。

猜你喜欢

转载自blog.csdn.net/SteveForever/article/details/81193327
今日推荐