前面已经介绍了通过post账号密码登录网页,下面重点介绍Cookie的使用

Cookie是什么

简单来说,我们访问每一个互联网页面,都是通过HTTP协议进行的,而HTTP协议是一个无状态协议,所谓的无状态协议即无法维持会话之间的状态。 比如,仅使用HTTP协议的话,我们登录一个网站的时候,假如登录成功了,但是当我们访问该网站的其他网页的时候,该登录与状态则会消失,此时还需要再登录一次,只要页面涉及更新,就需要反复的进行登录,这是非常不方便的。 所以此时,我们需要将对应的会话信息,比如登录成功等信息通过一些方式保存下来,比较常见的方式有两种:通过Cookie保存会话信息或通过Session保存会话信息。 不管是通过哪种方式进行会话控制,在大部分时候,都会用到Cookie。比如在爬虫的登录中,如果没有Cookie,我们登录成功了一个网页,但如果我们要爬取该网站的其他网页的时候,仍然会是未登录状态。如果有了Cookie,当我们登录成功后,爬取该网站的其他网页时,则会保持登录状态进行内容的爬取。

实战保持Cookie

import urllib.request
import urllib.parse
import http.cookiejar
import urllib.error
url = "http://zabbix.work/index.php"
postdata =urllib.parse.urlencode({
    "name": 'Admin',
    "password": 'zabbix',
    "autologin": 1,
    "enter": "登录"
    }).encode('utf-8') 
header={
    'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Mobile Safari/537.36',
    'Referer':'http://zabbix.work/zabbix.php?action=dashboard.view'
}
request=urllib.request.Request(url, postdata, headers=header)
cjar=http.cookiejar.CookieJar()    #创建CookieJar对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))    #使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象
urllib.request.install_opener(opener)    #将opener安装为全局
try:
    data=urllib.request.urlopen(request).read()
except urllib.error.HTTPError as e:
    print(e.code)
    print(e.reason)
fhandle=open("./1.html","wb")
fhandle.write(data)
fhandle.close()

url2='http://zabbix.work/screens.php?ddreset=1'
reponse2=urllib.request.urlopen(url)    #保持登录状态,跳转第二个链接
fhandle2=open('./2.html','wb')
fhandle2.write(reponse2.read())
fhandle2.close()