高考志愿-各校专业成绩
高考志愿-各校专业成绩
数据来自掌上高考,程序仅供学习使用,不得参与任何商业模式
前言
总之就是闲的
环境准备
python 3.8
安装所需的 python 库
pip install xlsxwriter pip install requests pip install selenium pip install bs4
根据电脑上的 Chrome 版本自行下载 chromedriver.exe ,需要保证 Chrome 浏览器前三个版本号相同
如图,我需要下载 104.0.5112.x 版本
修改 getScore.py 97 行,将下载的 chromedriver.exe 路径填写至 executable_path
运行 getScore.py 填写想要获取的专业,爬取结束后自动导出 Excel 表格
实现思路
使用 selenium 模拟浏览器访问,获取对应信息,模拟点击翻页
在掌上高考中通过其自身的id来获取浏览器的访问路径,首先获取相关专业的基本信息
getJson.py
import jsonimport requestssubjectJson = {'subject': []}url1 = 'https://api.eol.cn/web/api/?keyword=&level1=1&level2=&page='
url2 = '&size=30&sort=&uri=apidata/api/gkv3/special/lists&signsafe=111cd45f1f73e18c6d5cf51e3bcdf3d2'header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
}d = {'keyword': '','level1': 1,'level2': '','page': 26,'signsafe': 'f6a12f70ae234d735d2e19e1642c4724','size': 30,'sort': '','uri': 'apidata/api/gkv3/special/lists'}for i in range(26):url = url1 + str(i + 1) + url2result = requests.post(url, data=d, headers=header).json()['data']['item']for j in result:print(j['name'])subject = {'name': j['name'],'id': j['special_id'],'classify': j['level3_name'],'degree': j['degree']}subjectJson['subject'].append(subject)file = open('init.json', 'w+')
file.write(json.dumps(subjectJson, indent=4, ensure_ascii=False))
file.close()
写入对应的 json 文件,方便以后读取使用
getScore.py
import json
import timeimport xlsxwriter
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoupurl1 = 'https://www.gaokao.cn/special/'
url2 = '?sort=2&special_type=3&year='
url3 = '&kelei=1'year = ['2021', '2020', '2019', '2018', '2017']def cookiesStrtoDir(cook: str):cookiesDir = {}for i in cook.split('; '):cookiesDir[i.split('=')[0]] = i.split('=')[1]cookiesDir['name'] = ''cookiesDir['value'] = ''return cookiesDirdef getCode():html = driver.execute_script('return document.documentElement.outerHTML;')html = html.encode('utf-8').decode('utf-8')return htmldef analysisCode(html):htmlBs = BeautifulSoup(html, 'html.parser')if htmlBs.find(class_='noData')['style'] == 'display: block;':driver.refresh()time.sleep(5)html = getCode()analysisCode(html)else:schoolList = htmlBs.find_all(class_='name_des')for school in schoolList:schoolBs = BeautifulSoup(str(school), 'html.parser')schoolName = schoolBs.find(class_='float_l set_hoverl am_l').stringschoolScore = schoolBs.find_all(class_='tag_item')schoolScore = schoolScore[len(schoolScore) - 1].string.split(':')[1]schoolDir[schoolName] = schoolScoreprint(schoolName + ':' + schoolScore)def getWebNum(html):htmlBs = BeautifulSoup(html, 'html.parser')if htmlBs.find(class_='noData')['style'] == 'display: block;' and len(htmlBs.find_all(class_='ant-pagination')) == 0:print('未找到页面,重现加载...')driver.refresh()time.sleep(7)html = getCode()getWebNum(html)else:if 0 < len(htmlBs.find_all(class_='public_list_item public_tbl')) <= 10:return 1ui = htmlBs.find(class_='ant-pagination').find_all('li')webNumber = int(ui[len(ui) - 2]['title'])return webNumberdef writeExcel():workbook = xlsxwriter.Workbook(subjectName + '.xlsx')for key, value in allSchoolDir.items():worksheet = workbook.add_worksheet(str(key))worksheet.activate()worksheet.write_row('A1', ('学校', '最低分/最低位次'))num = 2for i, j in value.items():worksheet.write_row('A' + str(num), (i, j))num += 1workbook.close()if __name__ == '__main__':subjectName = str(input('请输入专业:'))subjectJson = json.loads(open('init.json', 'r+').read())isfind = Falsefor subject in subjectJson['subject']:if subjectName == subject['name']:isfind = Trueprint('初始化...')print('专业昵称:' + subject['name'])print('专业分类:' + subject['classify'])print('专业学位:' + subject['degree'])# 设置 ChormechromeOptions = webdriver.ChromeOptions()# 禁用日志打印chromeOptions.add_experimental_option('excludeSwitches', ['enable-logging'])chromeOptions.add_argument('--headless')chromeOptions.add_argument('--disable-gpu')driver = webdriver.Chrome(executable_path=r'E:\Driver\chromedriver.exe', options=chromeOptions)allSchoolDir = {}for y in year:schoolDir = {}yearUrl = url1 + str(subject['id']) + url2 + y + url3driver.get(url=yearUrl)html = getCode()webNum = getWebNum(html)while True:if str(type(webNum)) == '<class \'NoneType\'>':html = getCode()webNum = getWebNum(html)else:breakprint('开始爬取 ' + y + ' 信息...')for i in range(int(webNum)):classStr = 'ant-pagination-item.ant-pagination-item-' + str(i + 1)if not (i == 0):driver.find_element(By.CLASS_NAME, classStr).click()time.sleep(1)html = getCode()analysisCode(html)allSchoolDir[y] = schoolDirwriteExcel()breakif not isfind:print('未找到该专业,请核对后重试...')
在获取完近5年的分数后,自动导出 Excel 表格
最后
- 使用 Chrome 浏览器来示范,您也可以使用其他浏览器,需要下载对应浏览器对应版本的 WebDriver
- 使用 selenium 模拟浏览器访问 掌上高考
- 通过 BeautifulSoup 来对数据进行解析
- 通过 getJson.py 来获取 init.json 文件,其中包括专业的基本信息
- 所有数据来自 掌上高考 ,数据可能不全,还望谅解
高考志愿-各校专业成绩相关推荐
- 高考志愿填报选专业(家长版),探索自我
开篇申明,这个原稿是从百度文库搜到的,部分内容是我改写,部分文字是引用了原稿. 本文对高考填报志愿,选专业的家庭来说(家长),具有非常高的参考价值,希望能对更多高考家长有参考作用. 很多家长都是把自己 ...
- 文科生报志愿可以学计算机吗,文科生可以报哪些专业 2021高考志愿如何选择专业...
文科生可以报哲学类.经济学类.教育学类.历史学类.法学类.文学类.管理类.这些都是人文社会科学的专业,而文科即是以人类社会独有的政治.经济.文化等为研究对象的学科. 文科生报志愿可以选择的专业 1.& ...
- 上海2021编导高考成绩查询,2021山东编导专业高考志愿填报指导
填报高考志愿,其实是一场实力+运气的决策:我们只做山东编导专业高考志愿规划服务,更专业.更精准. [说明:本文有1800字,阅读时间约5分钟,最好耐心读完] 一.志愿批次说明 2021年,山东省艺术类 ...
- 2020高考志愿填报:去哪个城市?选什么专业?挑哪个学校?大数据分析告诉你!
2020年的高考已结束,随着各省份高考成绩的陆续公布,高考志愿填报即将开启! 高考志愿填报,最基本的就是选择学校与专业,而全国高校3005所,703个专业(本科专业506)该如何正确选择呢? 选专业还 ...
- 杨薇天津大学计算机专业,高考志愿报得好,一生幸福少不了,遇到问题怎么办?静海一中校友来支招儿~...
原标题:高考志愿报得好,一生幸福少不了,遇到问题怎么办?静海一中校友来支招儿~ 祝贺各位考生高考圆满结束! 俗话说学习改变命运,高考改变人生.要是志愿报得再好一些,那下半辈子就拿下啦~ ...虽然没这 ...
- 高考成绩查询2021年莆田市,2021年莆田高考志愿填报系统入口
高考志愿填报对于考生来说是非常重要的,下面是由出国留学网编辑给大家带来的"2021年莆田高考志愿填报系统入口",仅供参考,祝各位考生高考志愿填报顺利,能够进入理想的大学. 拓展阅读 ...
- 高考学文的能报计算机吗,高考志愿填报时,文科生能申报计算机类相关专业吗?...
对于高考志愿填报的问题,众多考生或多或少都有一些难以解决的问题,有人问到文科生是否能申报计算机类相关专业,今天小编就为各位考生详细解答这个问题. 高考志愿填报时,文科生能申报计算机类相关专业吗? 最先 ...
- 2018年陕西文科生可以报计算机专业am,2018年高考志愿:文科生,可以报考哪些专业!...
原标题:2018年高考志愿:文科生,可以报考哪些专业! 文科生一直以来就业情况都不容乐观,家长和考生对于文理选择都比较头疼,既然选了文科,不要迷茫,挑一个好专业,一样有好的就业前景.在数以百计的文科专 ...
- 2020高考报计算机专业指南,2020高考志愿填报最全攻略
高考结束后,如何填报志愿.如何选择专业与学校是摆在很多家长和考生面前的一道难题.俗话说"七分考,三分报",每年都有很多考生因为高分低报而浪费分数,或者因为低分高报而与大学失之交臂, ...
最新文章
- 求数组当中子数组最大和
- python自动登录校园网 密码_python实现校园网自动登录的示例讲解
- DL之PanopticFPN:Panoptic FPN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- python(numpy,pandas11)——pandas merge根据索引合并数据
- Linux下oracle全库导出,Oracle数据库导出导入
- AI视觉,视频云新挑战的解决之道
- SAP Spartacus delivery mode页面Cannot find control with的错误消息
- ps42k20服务器出现问题_天高客户端访问软件出现“服务器操作系统原因”问题解决方法...
- 【直男福音】7款破解版APP,助你早日脱单
- 二十四节气之夏至养生篇
- C 语言 —— 命名规则
- 微信小程序获取用户微信绑定手机号
- python转换整数_在Python中将数字转换为整数列表
- 【程序设计训练】棋盘
- Mysql-ERROR:1055错误修复
- PCB电路板如何设计散热
- 程序员进阶攻略-笔记-051~061(完)
- 软件工程导论—总体设计
- Day005 - 循环练习与列表基础
- 学习OpenCV(中文版)
热门文章
- uni-app入门教程(9)字体库、自定义组件、打包和新闻实战
- javascript动态网页制作
- 临床预测模型评鉴(PMID: 32695060)
- 【论文学习】ASVspoof 2015 the First Automatic Speaker Verification Spoofing and Countermeasures Challenge
- 富盛Sbo插件集Ver1.2.0 简介及免费下载
- 创建一个带参数的formgoup_基于原生Fabric-SDK-Go 实现一个简单的学历征信系统,状态数据库使用 CouchDB 来实现...
- Python该怎样学?大家是如何快速掌握Python的?(非常详细)
- 外卖投资开店2018年有点坑
- BATH - 国内汽车操作系统布局
- SSHFS--Linux快速挂载