Cookiejar 库处理 cookie 保存回话窗口的登陆状态

  • 像什么知乎,酷狗,拉钩这些大网站,模拟登陆有点复杂,所以还是学校的教务系统最友好

目录

1.无 cookie 处理模拟登陆教务系统


import urllib.request
import urllib.parse

url = 'http://es.bnuz.edu.cn:8080/login.do'

post_data = urllib.parse.urlencode({
    'tssName' : 'userid',
    'tssPassword' : 'password'
}).encode('utf-8') #使用 urlencode 编码处理后,在设置成 utf-8 编码

req = urllib.request.Request(url,post_data) #构建 Request 请求对象

#添加请求头
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWeb\
    Kit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36')

data = urllib.request.urlopen(req).read() #登录并爬取对应网页 html 代码

#将 html 代码写入文件
file = open('1.html','wb')
file.write(data)
file.close()


  • 在登陆页面输入用户和密码那里右键检查元素,可以看到他们对应的 name 属性的值;这里分别是 

       tssName 与 tssPassword,所以表单里面是它们

  • 要获取真实的登陆地址,按 F12 调出对应的调试界面,输入用户名与密码登陆,观察调试界面,可以看到很多网址,

       这些网址大多使用了 GET 方法,有一个使用的是 POST 方法,与之对应的就是 POST 表单的真实网址

  • 执行后,打开第一个是登陆状态,打开第二个仍然需要我们登陆

       因为在这里没有设置 cookie 处理,而 HTTP 协议是一个无状态协议,访问了新网页自然回话信息就消失了

 

2.Cookie 处理:

import urllib.request
import urllib.parse
import http.cookiejar

url = 'http://es.bnuz.edu.cn:8080/login.do'

post_data = urllib.parse.urlencode({
    'tssName' : 'userid',
    'tssPassword' : 'password'}).encode('utf-8') #使用 urlencode 编码处理后,在设置成 utf-8 编码

req = urllib.request.Request(url,post_data) #构建 Request 请求对象

#添加请求头
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWeb\
    Kit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36')

data = urllib.request.urlopen(req).read() #登录并爬取对应网页 html 代码

#使用 http.cookiejar.Cookiejar.CookieJar() 创建 CookieJar 对象
cjar = http.cookiejar.CookieJar()

#使用 HTTPCookieProcessor 创建 cookie 处理器,并以其为参数构造 opener 对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))

#将 opener 安装为全局
urllib.request.install_opener(opener)

file = opener.open(req)
data = file.read()
file = open('3.html','wb')
file.write(data)
file.close()

url1 = 'http://es.bnuz.edu.cn:8080/xiangmuStudent.do?method=goList'
data1 = urllib.request.urlopen(req).read() #登录并爬取对应网页 html 代码

#将 html 代码写入文件
file = open('4.html','wb')
file.write(data1)
file.close()

猜你喜欢

转载自blog.csdn.net/zjkpy_5/article/details/83514789
今日推荐