爬一爬!

仅仅记录一下一个java狂热者在python中的爬路经历。

谈谈自己对Java和Python在网络编程方面的感受: 曾经的我在java中写过不少爬虫,代码量非常的大(毕竟静态语言非得事先声明),而且post过程及其复杂,对cookie的操作也显得特别混乱(但是java的代码结构还是依然的清晰,有条有理。这也是动态语言不能超越的)。最近看了python中的网络编程,感叹其简洁性,曾经HttpUrlConnection或者HttpClient复杂的connect过程在python中仅一行代码urlopen。这真的是让我措手不及。废话少说....

我使用的是Python3.5,之前用2.7写过一次,使用的是url lib,urllib2,cStringIO。但是将源代码转换到python3.5之后,异常纷飞。

所以这里简要说明一下版本间的模块的对应关系:

python2.x,3.x对比
python2.7 python3.5
urllib url lib.parse
urllib2 url lib.request
cStringIO io
PIL.Image Image

思路:

1.先去xxx教务网站抓包,看一下我们网络请求所需要的数据。(chrome自带工具台)
2. 网站需要验证码

3.我们在第一次进入登陆页面的时候会返回一个set-cookie值

4.在登陆的时候需要post查询的学号以及密码

5.登录成功之后,每次访问其他数据都需要带上之前的cookie

整体的思路就是这样,接下来就来实现一下

import urllib.request as urllib2
import urllib.parse as urllib
import PIL.Image as Image
import io as cStringIO
import re

以上是在3.0中的导入过程,并且将对应关系写在上面。(其实是我太懒了,不打算重写一遍py3.5的代码,于是选择在使用新模块的时候沿用之前的名字)

studentId = input('请输入查询学号:')
password = input('请输入你的密码:')
req_index = urllib2.Request('http://jwc.xxx.edu.cn/bkjw/')
res_index = urllib2.urlopen(req_index)
img_cookie = res_index.headers['Set-Cookie'].split(';')[0]
#print(img_cookie)

首先呢输入学号和密码等个人信息,并且模拟登陆页面,获得浏览器的set-cookie值img_cookie

第二步,请求验证码图片,同时带上获得到的cookie字段img_cookie。在获取到图片的bytes流之后,使用io模块转为文件并使用Image模块显示。

(注意这里标注为**的一行,在2.x中使用的是cStringIO.StringIO,而在3.x中使用的是io.BytesIO),最后调用show方法显示。

req_getimg = urllib2.Request('http://jwc.xxx.edu.cn/bkjw/captchaImage')
req_getimg.add_header('Cookie',img_cookie)
res_getimg = urllib2.urlopen(req_getimg)
img_output = res_getimg.read()
**file = cStringIO.BytesIO(img_output)
img = Image.open(file)
img.show()

根据之前的个人信息及验证码信息组装表单

x = input('请输入验证码: ')
mydata = {'usercode':studentId,'password':password,'code':x}

发出post请求,请求登陆

req_in = urllib2.Request(url='http://jwc.xxx.edu.cn/bkjw/login',data=urllib.urlencode(mydata).encode('utf8'))
req_in.add_header('Cookie',img_cookie)
res_in = urllib2.urlopen(req_in)

最后我打算实现的功能是查询自己的cet成绩,在查询过程中携带之前的cookies,并且在3.x在得到输出流之后要decode('utf8' )进行解码,然后通过对字符串的操作获得我想要的信息。这里不过多解释

req_cet = urllib2.Request(url='http://jwc.xxx.edu.cn/bkjw/sljcjcx/sljcjcxInit')
req_cet.add_header('Cookie',img_cookie)
res_cet = urllib2.urlopen(req_cet)
html_cet = res_cet.read().decode('utf-8')
mycet = html_cet.split('</br>')
studentName = mycet[0].split("<td width=\"202\">")[1].split("</td>")[0]
studentXueY = mycet[0].split("<th>学      院:</th>")[1].split("<td colspan=\"3\">")[1].split("</td>")[0]
mycet[0] = mycet[0].split("<td colspan=\"4\">")[1]
print ('=======================================CET score====================================')
print ('学号:%s'%studentId)
print ('姓名:%s'%studentName)
print ('学院:%s'%studentXueY)
print ('\n')
for i in range(3):print(mycet[i].strip())

最终效果图:

**注释**

由于涉及到一些隐私,就不去透露具体的学校和网址了。在校学生感兴趣的可以试一试,抓好包其他问题不在话下。(毕竟京东的我也爬过,完全没问题。学校教务网页的水平就摆在那里,很少有反爬机制。)

今年6级木有报上,写篇博客为明年的6级开个好头...

爬一爬xxx学校的教务网站相关推荐

  1. Java爬取frame的课程表_从爬取湖北某高校hub教务系统课表浅谈Java信息抓取的实现 —— import java.*;...

    原创文章与源码,如果转载请注明来源. 一.概述 整个系统用Java开发.我们现在要做的是类似于超级课程表.课程格子之类的功能:输入一个学生的教务系统账号.密码,得到Ta的课程表信息.点击进入课表查询, ...

  2. python 爬带端口的网站_程序员带你爬取爬虫最爱扒的网站数据。快来看!

    无私分享全套Python爬虫干货,如果你也想学习Python,@ 私信小编获取 先问三个问题: 1.你以为你在大众点评上找到的馆子,真的是几百个人给了好评,然后才出现在你的推荐里的吗? 2.你以为你在 ...

  3. 入侵XXX学校教务管理系统过程记录

    by:prettysky 以前的女朋友告诉我,她在学校(教务管理系统)报网上选修课的帐号密码丢了,或许是被别人修改了. 入侵开始: 1:扫描学校所在的整个C类IP段在线的主机. 结果出来了,共有4个存 ...

  4. python3爬取超级课程表学校及院系的列表

    python3爬取超级课程表学校及院系列表 python3爬取超级课程表学校及院系的列表 安装软件 抓取数据 编写程序 python3爬取超级课程表学校及院系的列表 一共三步:1.安装软件 2.抓取数 ...

  5. python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...

    一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...

  6. python爬虫学校正方教务系统获取全部成绩

    python爬虫正方教务系统许昌学院 来自许昌学院的大四小菜鸡,疫情封在宿舍,闲来无事在宿舍爬了一下之前没成功的教务系统爬虫,当时觉得挺难的,今天发现这个还是挺简单的,这个程序参考了很多前辈大佬们的程 ...

  7. python爬虫什么意思-这样学Python爬虫,想爬什么爬什么

    原标题:这样学Python爬虫,想爬什么爬什么 你知道怎么学爬虫吗?正确的入门姿势在这里!只要学好了Python爬虫,真的是可以想爬什么爬什么哟,像什么美女图片啦,美食图片啦,美景图片啦.(小编可不知 ...

  8. python爬网易云音乐评论最多的歌_使用Python爬一爬网易云音乐上那些评论火爆的歌曲...

    网易云音乐这款音乐APP本人比较喜欢,用户量也比较大,而网易云音乐之所以用户众多和它的歌曲评论功能密不可分,很多歌曲的评论非常有意思,其中也不乏很多感人的评论.但是,网易云音乐并没有提供热评排行榜和按 ...

  9. python爬虫网易云音乐评论最多的歌_使用Python爬一爬网易云音乐上那些评论火爆的歌曲...

    网易云音乐这款音乐APP本人比较喜欢,用户量也比较大,而网易云音乐之所以用户众多和它的歌曲评论功能密不可分,很多歌曲的评论非常有意思,其中也不乏很多感人的评论.但是,网易云音乐并没有提供热评排行榜和按 ...

最新文章

  1. 使用Python批量修改数据库执行Sql文件
  2. sqap不支持python3吗_Supporting Python 3(支持python3)——欢迎来到Python 3
  3. Google新WorldSense预告片:独立VR
  4. php chilkat.certstore,angularjs实现冒泡排序算法的可视化
  5. .NET智能客户端(SmartClient)
  6. python有什么好玩的库_你知道Python很火!那你知道它有哪些好玩的库吗?
  7. Android 美团Robust热更新 使用入门
  8. Navicat 远程连接ubuntu出现的问题
  9. spring boot jwt_springboot整合JWT
  10. 在线求CR,你觉得我这段Java代码还有优化的空间吗?
  11. blender 3d打印_如何在Blender中开始3D打印
  12. 黑客高手是这样上网的!Vimer是如何用快捷键浏览网页的?
  13. WebService学习笔记系列(四)
  14. [App Store Connect帮助]二、 添加、编辑和删除用户(5)创建一个沙盒测试员帐户...
  15. Linux 中断详解
  16. 【U+】通用财务修改财务参数:业务生成的会计凭证不允许修改
  17. 无限滚动新一代老虎机
  18. php 获取北京时间
  19. GO语言开源项目TOP 100
  20. 微信步数C语言程序,获取微信步数 - osc_1v2pb1nt的个人空间 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. NDIS的NDIS_PROTOCOL_BLOCK和NDIS_OPEN_BLOCK的介绍
  2. 全球造船业发展现状分析,正处于行业上升时期「图」
  3. 工商银行计算机水平怎么填写,2020中国工商银行校园招聘,网申简历指导
  4. 中央空调如何维修?中央空调如何保养?
  5. 写磁盘与缓存的两种方式
  6. Tensorflow实例:实现基于LSTM的语言模型
  7. ORACLE11g ORA-12514 TNS 监听程序当前无法识别连接描述符中请求的服务
  8. PoE交换机三种标准
  9. 律师在线付费咨询小程序
  10. 测试开发实践系列:为满足OTA及”大数据”更新的并行刷写和队列刷写分析