- 像什么知乎,酷狗,拉钩这些大网站,模拟登陆有点复杂,所以还是学校的教务系统最友好
目录
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()