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

  • python3爬取超级课程表学校及院系的列表
    • 安装软件
    • 抓取数据
    • 编写程序

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

一共三步:1.安装软件 2.抓取数据 3.编写程序。

安装软件

python3版本,idle凭个人喜好,本人用的是anaconda的jupyter notebook;抓包用的fibbler 5.0;最新版本的超级课程表(手机)。

抓取数据

1.搭建抓包环境。首先使电脑和手机处于同一wifi中,在手机的“无线网络”设置中添加wifi时(如果已经连接则长按wifi名称选择“更改网络”)点开高级选项,在“代理”选项中选择“手动”,在“服务器主机名”中填写电脑的IP地址,在“服务器端口”中填写抓包的端口(此处注意这里的端口号要和fibbler抓包的端口号一致,fibbler默认是8888,还要注意不要和其他端口冲突;笔者在抓包过程中anaconda的默认端口也是8888,导致403了好久)。设置好后在手机上正常操作软件(网络请求),观察抓包软件会有显示,就说明环境搭建好了
2.开始抓取数据。在手机上打开超级课程表软件,点击进入个人的信息页,选择更改学校(此处会有提示仅有两次,无视,只要不保存就可以),然后在输入框中随机输入一个学校(此处厚颜无耻的修改为清华大学)
然后在fibbler软件中就会看到我们发出了一个请求

此处笔者也困惑了一下,在软件中请求的是通过文字搜索的学校,但是在网络请求中post的是schoolId,那么应该是有一个两个值的对应表的,然后再次观察这个请求过程,发现是有一个updateschoolList的请求,但是返回值是空的,所以我怀疑可能是在手机本地有缓存的文件(如果有开始抓取后才开始注册文件的朋友可以尝试下看下返回结果留言给我)。

编写程序

梳理思路:
模拟发出请求→接收返回数据→拆包→写入文件存储

import requests
import csvdef get_school_name():headers = {"Cookie": "JSESSIONID=289617D002DA1E5DBAB1F9B6851AB63C-memcached1; Path=/; HttpOnly","User-Agent": "Dalvik/2.1.0 (Linux; U; Android 8.0.0; LLD-AL20 Build/HONORLLD-AL20)-SuperFriday_9.6.1","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Content-Length": "146","Host": "120.55.151.61","Connection": "Keep-Alive","Accept-Encoding": "gzip",}data = "phoneModel=LLD-AL20&searchType=5&phoneBrand=HONOR&channel=huawei&page=1&platform=1&versionNumber=9.6.1&content=160027&phoneVersion=26&timestamp=0&"url = "http://120.55.151.61/V2/School/getUpdateSchoolList.action"#此处为在下课聊论坛处获取schoolID和学校名称的字典s = requests.Session()r = s.post(url = url,data = data,headers = headers)print(r.status_code)# print(r.text)school_text = r.text.replace("false","False")  #此处如果不替换会有关键字报错school_list = eval(school_text)["data"]["schoolBOs"]school_dict  = []for school in school_list:school_dict.append({"name":school["name"],"id":school['schoolId']})
#     print(school_dict)return school_dictdef get_school_content(s_list):s = requests.Session()school_dict_list = []print("爬取开始")for school in s_list:if school["name"] != "":print(school["name"],school["id"])url = "http://120.55.151.61/V2/Academy/findBySchoolId.action"data = "phoneModel=LLD-AL20&phoneBrand=HONOR&schoolId=" + str(school["id"]) + "&channel=huawei&platform=1&versionNumber=9.6.1&phoneVersion=26&"
#             data = "phoneModel=LLD-AL20&phoneBrand=HONOR&schoolId=" + '1001' + "&channel=huawei&platform=1&versionNumber=9.6.1&phoneVersion=26&"headers = {"Cookie": "JSESSIONID=289617D002DA1E5DBAB1F9B6851AB63C-memcached1; Path=/; HttpOnly","User-Agent": "Dalvik/2.1.0 (Linux; U; Android 8.0.0; LLD-AL20 Build/HONORLLD-AL20)-SuperFriday_9.6.1","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Content-Length": "113","Host": "120.55.151.61","Connection": "Keep-Alive","Accept-Encoding": "gzip"}r = s.post(url = url,data = data,headers = headers)content = eval(r.text)["data"]temp_list = []
#             print(r.text)for item in content:temp_list.append(item["name"])school_dict_list.append({"name":school["name"],"id":school["id"],"content":temp_list})print("爬取结束")return school_dict_listdef save1(school_dict_list):f = open("C:\\Users\\KSH\\Desktop\\爬虫.txt","w")f.write(str(school_dict_list))f.close()def save2(school_dict_list):f = open("C:\\Users\\KSH\\Desktop\\爬虫.csv","w")csv_writer = csv.writer(f)csv_writer.writerow(["大学","schoolID","院系"])for school in school_dict_list:contentList = [school["name"],school["id"]]contentList.extend(school["content"])csv_writer.writerow(contentList)f.close()# a = [{"name":"清华大学","id":"1001"},{"name":"清华大学","id":"1001"}]
a = get_school_name()
b = get_school_content(a)
save2(b)

完整代码下载
爬取下来的csv文件下载

参考文章:
爬虫再探实战(五)———爬取APP数据——超级课程表【一】——不秩稚童

python3爬取超级课程表学校及院系的列表相关推荐

  1. Python3 爬取携程网[2]: 爬取北京五星级酒店详细信息

    目录 1. 需求分析 2. 实验环境 3. 具体实现 3.1 分析页面 3.2 请求 3.3 响应 3.3.1 BeautifulSoup提取标签信息 3.3.2 正则表达式提取字符串信息 3.3.3 ...

  2. Python2 Python3 爬取赶集网租房信息,带源码分析

    *之前偶然看了某个腾讯公开课的视频,写的爬取赶集网的租房信息,这几天突然想起来,于是自己分析了一下赶集网的信息,然后自己写了一遍,写完又用用Python3重写了一遍.之中也遇见了少许的坑.记一下.算是 ...

  3. python3爬取百度图片

    python3爬取百度图片 最终目的:能通过输入关键字进行搜索,爬取相应的图片存储到本地或者数据库 首先打开百度图片的网站,搜索任意一个关键字,比如说:水果,得到如下的界面 分析: 1.百度图片搜索结 ...

  4. Python3爬取影片入库

    Python3爬取影片入库 1.服务器说明 [root@openshift maoyan]# cat /etc/redhat-release CentOS Linux release 7.4.1708 ...

  5. Python3爬取企查查网站的企业年表并存入MySQL

    Python3爬取企查查网站的企业年表并存入MySQL 本篇博客的主要内容:爬取企查查网站的企业年报数据,存到mysql中,为了方便记录,分成两个模块来写: 第一个模块是爬取数据+解析数据,并将数据存 ...

  6. Python3爬取国家统计局官网2019年全国所有城市(2020年更新)

    Python3爬取国家统计局官网2019年全国所有城市(2020年更新) 一级城市爬取 一级城市爬取 由于最近需要用到所有城市的数据,故从统计局爬取19年的一级城市数据 import random i ...

  7. python3爬取巨潮资讯网站年报数据

    python3爬取巨潮资讯网站年报数据 2018年年底巨潮资讯http://www.cninfo.com.cn改版了,之前实习生从网上找的脚本不能用了,因此重新修改了下爬取脚本.最初脚本的原链接忘了, ...

  8. 使用python3 爬取豆瓣电影热映和即将上映

    使用python3爬取都摆即将上映和正在热映的电影,代码如下 直接使用bs4获取页面,使用css 获取到对应的信息后,使用字符串拼接的方式,将正在热映和即将上映的信息拼接出来并写入到html页面中,在 ...

  9. Python3 爬取豆瓣电影信息

    原文链接: Python3 爬取豆瓣电影信息 上一篇: python3 爬取电影信息 下一篇: neo4j 查询 豆瓣api https://developers.douban.com/wiki/?t ...

最新文章

  1. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.01更新)
  2. php对象编程遇到的BUG!
  3. Codeforces 858A. k-rounding 数论
  4. BZOJ1856:[SCOI2010]字符串
  5. LeetCode之Valid Parentheses
  6. Android NDK之静态/动态注册Native方法
  7. 多方法调用 一个出错 集体回滚_一个@Transaction哪里来这么多坑?
  8. ACM Fellow发文抨击【同行评审】作弊轻松中顶会
  9. java hiveconf_Java学习路线分享hive的运行方式
  10. 网络编程之 哈希表原理讲解 来自老司机的源码
  11. java oom分析_JAVA各种OOM代码示例与解决方法
  12. go 实现单链表反转
  13. 记一次PLC和脉冲型伺服电机的接线方法_20210915
  14. 协方差局长你_关于Eviews,你必须知道的20个精彩问答
  15. docker中安装Nexus3
  16. SQL Server2012版完全卸载
  17. 苹果 / Apple iCloud 教育版 200GB 云盘账号自助注册教程
  18. zyf的童年(异或运算的运用)
  19. 三/五/七/九点二次平滑法
  20. Bugku web — ereg正则%00截断(代码审计) ——详细题解

热门文章

  1. csdn博客怎么转载别人的文章
  2. Allegro如何旋转元器件
  3. 浙江上虞白马湖村 赵姓溯源
  4. Beosin成都链安态势感知安全预警:游戏项目方需注意随机数安全,警惕薅羊毛攻击...
  5. 《论文写作》课程小结
  6. NC6 的单据类型枚举 类
  7. mooc-人工智能信息社会-新闻热点与身边的人工智能
  8. 刚颁布的《中国贫富标准线》,
  9. Unity 针对移动平台后台下载的官方插件BackgroundDownload
  10. 谷歌要完,百度也危了