30行代码获取教务网成绩并存入Excel

“觊觎”教务网不是一天两天了。。

之前试过selenium,结果失败。
昨天爬下来了,发现竟如此简单!
整个过程仅花核心代码30余行。

一、步骤

1、首先查看分析

打开界面是这样

查看源码是这样

什么都没有,难怪用selenium定位不到了。估计还得配合PhantomJS来渲染页面,麻烦呀。于是想到抓包,一下就抓出来了。

2、抓包
抓包过程就不赘述,详情也可见我上一篇文章
http://www.jianshu.com/p/1f44a9a2ddd8
最终获得成绩的真实URL地址。

3、下载数据
最先是试着不登录,直接用requests获取抓包得到的URL,结果获得这一串



当时吓坏了我这个小白.。
上网查有说什么“空指针错误”的,狐疑。
后面设置headers,加上cookies,还开启Session,稀里糊涂通过。

805784604.png

当时是想着抓包得到的URL可能是临时触发的,所以必须保持在一个会话中。
后面用network分析了下,果然如此,而且session会话只停留一定的时间。

20170327121351934.jpg
20170327121516924.jpg

由此类推,先得打开成绩查询,才能触发前面这个包,然后触发我们要的包。
所以,还是得模拟登陆

4、数据处理与保存
这里选择存入Excel。
看到一排排整齐的<td align="center">,于是用BeautifulSoup,text方法获取文本,所有的数据放入list中,简直完美。

数了下每一行有:课程号、课序号、课程名、英文名、学分、属性、分数共7项。

可这是一个大的list呀,
如何将数据“规整地”存入Excel
// 嘿嘿,放点小招 //~~

data_list=[]
for data in content:
    data_list.append(data.text.strip())
    new_list=[data_list[i:i+7] for i in range(0,len(data_list),7)]

成功list中分割list,每一个list正好是7项。


20174960468406.png

黑魔法的味道?哈哈哈我简直聪明_!
(当然不会告诉你是在stackoverflow上找到的)
有了这里铺垫,存入数据就简单了。

</br>

二、结果

如下所示

图1.png
图2.png

看了一下,从入学到现在,一共考了73科。
一不小心暴露学渣的本质。。。。。

048967407png

三、代码

还是放完整版,方便查看:

# !usr/bin/env python
#  -*-coding:utf-8 -*-
__author__='WYY'
__date__='2017.03.26'

#实战小项目:爬取教务网成绩并存入excel
import requests
import xlwt
from bs4 import BeautifulSoup

#模拟登录
formData={'zjh':'xxxxxxxxxxxxx','mm':'xxxxxx'}
s=requests.Session()
Post=s.post(url='http://zhjw.scu.edu.cn/loginAction.do',data=formData)
print Post.status_code

#获取基本信息
detailURL='http://zhjw.scu.edu.cn/gradeLnAllAction.do?    type=ln&oper=qbinfo&lnxndm=2016-2017%D1%A7%C4%EA%C7%EF(%C1%BD%D1%A7%C6%DA)'
html=s.get(url=detailURL)
main=html.content.decode('gbk')
soup=BeautifulSoup(main,'lxml')
content=soup.find_all('td',align="center")

#将信息放入一个list中,创建new_list(方便后续存入excel)
data_list=[]
for data in content:
    data_list.append(data.text.strip())
new_list=[data_list[i:i+7] for i in range(0,len(data_list),7)]

#数据存入excel表格
book=xlwt.Workbook()
sheet1=book.add_sheet('sheet1',cell_overwrite_ok=True)
heads=[u'课程号',u'课序号',u'课程名',u'英文课程名',u'学分',u'课程属性',u'成绩']
print u'\n准备将数据存入表格...'
ii=0
for head in heads:
    sheet1.write(0,ii,head)
    ii+=1
i=1
for list in new_list:
    j=0
    for data in list:
        sheet1.write(i,j,data)
        j+=1
    i+=1
book.save('JiaoWuChengJi.xls')
print u'\n录入成功!'

也可看Github:
https://github.com/LUCY78765580/Python-web-scraping/blob/master/JWCJ.py
</br>

四、总结

总结这次爬虫的关键:
1、巧用抓包,找到成绩真实URL
2、模拟登录,并用Session保持会话
3、使用xlwt将数据写入excel
4、实用小技巧:new_list=[data_list[i:i+n] for i in range(0,len(data_list),n)]

最后这一项,简直堪称神奇的语法糖⊙ω⊙
本篇就是这样啦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,018评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,296评论 18 399
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,270评论 0 2
  • 1. 左移(<<) 0000 0000 0000 0000 0000 0000 0000 0101然后左移2位后,...
    筱南独舞阅读 943评论 3 10