本文转自本人简书内容详情
选课功能已经更新

前言

前段时间,小编抓取了搜狐新闻网某网页的内容,并作词云分析,感觉很是爬虫有趣。最近突然心血来潮想要爬取一下我们学校的教务系统抓取课表。
#思路解析
A 、先打开登陆页面,获取cookies;B、再访问验证码的地址,因为验证码是动态的,每次打开都是不同的,所以我们需要保存之前的cookie,保证获取的验证码和后续要提交的表单是同步的。C、然后就是识别验证码的环节,登陆成功后为了避免网页的重定向,所以还需要用requests的session函数禁止重定向。D、构建post表单请求数据,然后将数据提交给网站 F、获取响应头信息,通过返回的网页内容来判断是否登陆成功。

模拟登陆

在开题之前,先带大家认识一下:浏览器请求网页的流程。
在web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML发送给浏览器。但是在没有携带cookie的情况下,如果IP短时间高并发的请求网站,该IP就会被封。这里解释一下cookie,cookie是一种回话机制,可以用来存储很多信息,也经常用于反爬。我们一般处理cookie有两种方法:1、cookie的保存 2、cookie的读取。然后登陆部分的处理通常采用的方法就是将爬虫模拟成浏览器,有:1、通过opener添加headers 2、通过requests添加headers 3、批量添加headers 。小编采用的是第二种方法。
用浏览器打开教务处系统的界面如下:

上面提到的headers,cookie等参数的获取,也是有两种方法获取。1、在登陆页面按F12进入开发者模式,选择network,再选中preserve log,选中login页面 ,如图操作:

给大家解释下上图的主要信息,在伪装浏览器部分中,重点是获取请求的头部信息和服务器返回的响应头(response headers)。
1 request url :是浏览器真实请求的地址
2 accept :告诉浏览器自己接受什么类型
3 accept language :浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
4connection 表示是否是持久连接。
5 host 初始url中的主机端口
6 user-agent :浏览器类型
关于提交表单的获取,我们可以尝试故意输错账号或者密码得到提交的表单信息,即通过进入开发者工具或者Fiddler 抓包,如下图:

第二种方法就是通过fiddler抓包分析(简单粗暴)个人比较喜欢。
话不多说,给大家上代码:

import requests
import http.cookiejar
from PIL import Image
from bs4 import BeautifulSoup
#导包
cookies = {} #构建一个空字典用来存放cookies
#伪装成浏览器进行网页请求
headers = {'Connection': 'Keep-Alive','Accept-Language': 'zh-CN,zh;q=0.8','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0','Accept-Encoding': 'gzip, deflate','Upgrade-Insecure-Requests':'1','Referer': 'http://172******8******','X-Requested-With': 'XMLHttpRequest','Host': '172.*********',
}#
#
#构建提交表单
def login(username, password, code):url = 'http://172.************/loginAction.do'form = {'zjh1': '','tips': '','lx': '','evalue': '','eflag': '','fs': '','dzslh': '','zjh': username,'mm': password,'v_yzm': code}resp = requests.post(url, headers=headers, data=form, cookies=cookies)

写到这里,实在是忍不住要吐槽urp教务系统,代码写得像**一样,小编在看源码时就看懂一个参数“mm”=密码,其他的参数,,,,,
#验证码的识别
一般来讲,验证码的识别有三种方法:
1 人工识别
2 调用tesseract-ocr,自动识别
3 接入付费接口进行识别
这里小编采用的是人工识别,我尝试了tesseract的pillow库来识别,额,,,,,效果嘛,因为是免费的,所以识别的成功率一言难尽啊。给大家看下我们教务系统的验证码:

没有经过任何的噪声处理,成功率仅为百分之25.真的是 # 很无语 #。
思路就是将验证码保存到本地,然后再调用PIL的image库,把验证码呈现出来,手动输入,完成表单的提交。其实我更想爬取所有的验证码,然后利用神经网络和机器学习做一个训练集,进行自动识别。

imgurl = '验证码图片的请求链接'
mysession = requests.Session()
html = mysession.get(imgurl,timeout=60*4)
checkcode = mysession.get(imgurl,timeout=60*4)
with open('checkcode.png','wb') as f:f.write(checkcode.content)
check_img = Image.open("checkcode.png")
check_img.show()
v_yzm = input("code:")

然后我们就可以检验是否是登陆成功了,小编选取的是课表的查询:

def get_classinfo():url = 'http://172.20.139.153/xkAction.do?actionType=6'resp = requests.get(url, headers=headers, cookies=cookies)soup = BeautifulSoup(resp.text,'lxml') class = soup.find_all("td")print(class)

选课功能:

!!!!选课
def ch_class(clanum):url = "http://172.@@%%**Type=-1&fajhh=3268"# resp = requests.get(url,headers = headers,cookies = cookies)form_1= {'actionType':'2','pageNumber':'-1','oper 1':'ori'}form_2 = {'kch':clanum,'actionType':'2','oper2':'gl','pageNumber' :'-1'}form_3={'kch':clanum + '_01','preActionType':'2','actionType':'9'}url_1 = 'http://172**.1*3/xkAction.do?actionType=2&pageNumber=-1&oper1=ori'response = requests.post(url,data = form_1,cookies = cookies)responce = requests.post(url_1,data = form_2,cookies = cookies,allow_redirects=False)soup = BeautifulSoup(responce.content,'lxml')pagecon=soup.find("strong")   #判断选课是否成功,可以用bool或者while,然后增加死循环,不停提交表单,直到出现strong标签或者输出不为空print(pagecon)

爬取结果如图:
(ps:这是没有经过字符串处理的,后续小编会系统化输出结果以及完善成绩查询和选课内容)


本人还是个小白,希望大家多多指教。

用爬虫模拟登陆urp教务处系统相关推荐

  1. 用python做课表_python模拟登陆urp教务处选课抓取课表

    !!!选课功能已添加!!! 本文地址 csdn 前段时间小编写了一篇利用爬虫做词云分析的帖子,有粉丝反馈说想进一步学习爬虫,所以小编今天就用爬虫模拟登陆学校的教务处为例和大家共同学习.坊间有传言说好多 ...

  2. python爬取学校教务管理系统_python爬虫模拟登陆学校教务处

    最近在学python爬虫,我想教务处官网可能是每个学生第一个自己动手爬取的网站吧.而且很多学校的教务处没有验证码,很适合初学者练手. 环境准备 本次模拟登陆用到的库除了requests外还有lxml, ...

  3. php模拟登陆,php实现模拟登陆正方教务系统

    本文主要介绍通过php的curl库实现正方教务系统的登陆,由于正方教务系统每年可能会有一些更新,因此本文是针对2018年而言,所介绍一些模拟登陆正方的方法,希望能帮助到大家. 1.保存登陆界面的验证码 ...

  4. php模拟登陆正方教务系统(2018年)

    php模拟登陆正方教务系统(2018年) 本文主要介绍通过php的curl库实现正方教务系统的登陆,由于正方教务系统每年可能会有一些更新,因此本文是针对2018年而言,所介绍一些模拟登陆正方的方法. ...

  5. python实用脚本 知乎_Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  6. Java--使用httpClient模拟登陆正方教务系统获取课表

    最近形如课程格子与超表课程表应用如雨后春笋般涌现,他们自动获取课程表是怎么实现的呢.于是我用Java实现了一下模拟登陆正方教务系统获取课表的过程. 首先,我们先了解一下网站登录的原理:当我们输入学号, ...

  7. python爬虫设计在哪里_《python 爬虫教程 知乎》 怎样用Python设计一个爬虫模拟登陆知乎...

    <python 爬虫教程 知乎> 怎样用Python设计一个爬虫模拟登陆知乎 python 爬虫教程 知乎2020-09-23 01:45:13人已围观 怎样用Python设计一个爬虫模拟 ...

  8. python 突破b站验证码_Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能...

    写在前面 今天带给大家一个突破点选验证码的案例,利用爬虫模拟登陆哔哩哔哩,并且把一些采坑的地方给大家强调一下! 一.需求分析 模拟登陆哔哩哔哩 网站链接: https://passport.bilib ...

  9. python输入学号返回成绩_Python模拟登陆正方教务系统并抓取成绩单

    学校的教务系统是正方的,在大学期间无论是选课.报名还是查成绩,几乎都要和它打交道,上学期在积累了一定的爬虫和web知识后,我就想着用Python模拟登陆教务系统,实现在命令行里方便地进行成绩或课表的查 ...

  10. 爬虫模拟登陆手机验证码_爬虫入门到精通-headers的详细讲解(模拟登录知乎)...

    本文章属于爬虫入门到精通系统教程第七讲 直接开始案例吧. 本次我们实现如何模拟登陆知乎. 1.抓包 1. 首先打开知乎登录页 知乎 - 与世界分享你的知识.经验和见解 注意打开开发者工具后点击&quo ...

最新文章

  1. 软件调试的艺术笔记:GDB
  2. 【飞书成长日记】飞书功能发展路径
  3. Mysql压测工具mysqlslap 讲解
  4. 嵌入式计算机的特点和应用,以下描述中,()不是嵌入式操作系统的特点。A.面向应用,可以进行裁剪和移植B.用 - 信管网...
  5. 初识NIO之Java小Demo
  6. Paper Pal:一个中英文论文及其代码大数据搜索平台
  7. 20180320作业2:进行代码复审训练
  8. Android TextView,EditText要求固定行数自动调整TextSize
  9. win10怎么用计算机的搜索,win10 搜索用不了的问题
  10. 深入理解cookie
  11. 联想y7000笔记本触摸板开启快捷键_关闭笔记本触摸板四种方法【图文教程】
  12. NLP-信息抽取-NER-2019:LGN【A Lexicon-Based Graph Neural Network for Chinese NER】
  13. 网页做服务器的监控界面,服务器监控页面
  14. Linux开发心得总结5 - Linux下OOM Killer机制详解
  15. 线索二叉树(中序、先序和后序及遍历)
  16. 查询薪金比“SMITH”或者“ALLEN”多的所有员工的编号、姓名、部门名称、领导姓名、部门人数、平均工资、最高及最低工资
  17. php扣费到期自动续期,PHP 处理苹果的自动续签
  18. Java架构师学习路线图
  19. 使用Cookie记住多个登录账号!
  20. Python 绘制隐函数图像

热门文章

  1. [2017BUAA软工助教]博客格式的详细说明
  2. 【渝粤教育】国家开放大学2018年秋季 1289T中国当代文学专题 参考试题
  3. php微信跳转到支付宝,微信点击短链接直接跳转到支付宝领红包教程 附带例子...
  4. 读书笔记:《结构思考力》基于目标定主题
  5. excel最大行数各版本介绍
  6. 如何从课堂派上扒取直播视频
  7. 摄影构图学83年绝版_学手机摄影最好要知道的81条忠告!都是大实话
  8. 在计算机上怎么找资源管理器,资源管理器怎么打开 教你如何快速打开资源管理器...
  9. 音频编码之aac编码原理
  10. 如何向中级程序员转变