高考志愿-各校专业成绩

数据来自掌上高考,程序仅供学习使用,不得参与任何商业模式

前言

总之就是闲的


环境准备

  • 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 文件,其中包括专业的基本信息
  • 所有数据来自 掌上高考 ,数据可能不全,还望谅解

高考志愿-各校专业成绩相关推荐

  1. 高考志愿填报选专业(家长版),探索自我

    开篇申明,这个原稿是从百度文库搜到的,部分内容是我改写,部分文字是引用了原稿. 本文对高考填报志愿,选专业的家庭来说(家长),具有非常高的参考价值,希望能对更多高考家长有参考作用. 很多家长都是把自己 ...

  2. 文科生报志愿可以学计算机吗,文科生可以报哪些专业 2021高考志愿如何选择专业...

    文科生可以报哲学类.经济学类.教育学类.历史学类.法学类.文学类.管理类.这些都是人文社会科学的专业,而文科即是以人类社会独有的政治.经济.文化等为研究对象的学科. 文科生报志愿可以选择的专业 1.& ...

  3. 上海2021编导高考成绩查询,2021山东编导专业高考志愿填报指导

    填报高考志愿,其实是一场实力+运气的决策:我们只做山东编导专业高考志愿规划服务,更专业.更精准. [说明:本文有1800字,阅读时间约5分钟,最好耐心读完] 一.志愿批次说明 2021年,山东省艺术类 ...

  4. 2020高考志愿填报:去哪个城市?选什么专业?挑哪个学校?大数据分析告诉你!

    2020年的高考已结束,随着各省份高考成绩的陆续公布,高考志愿填报即将开启! 高考志愿填报,最基本的就是选择学校与专业,而全国高校3005所,703个专业(本科专业506)该如何正确选择呢? 选专业还 ...

  5. 杨薇天津大学计算机专业,高考志愿报得好,一生幸福少不了,遇到问题怎么办?静海一中校友来支招儿~...

    原标题:高考志愿报得好,一生幸福少不了,遇到问题怎么办?静海一中校友来支招儿~ 祝贺各位考生高考圆满结束! 俗话说学习改变命运,高考改变人生.要是志愿报得再好一些,那下半辈子就拿下啦~ ...虽然没这 ...

  6. 高考成绩查询2021年莆田市,2021年莆田高考志愿填报系统入口

    高考志愿填报对于考生来说是非常重要的,下面是由出国留学网编辑给大家带来的"2021年莆田高考志愿填报系统入口",仅供参考,祝各位考生高考志愿填报顺利,能够进入理想的大学. 拓展阅读 ...

  7. 高考学文的能报计算机吗,高考志愿填报时,文科生能申报计算机类相关专业吗?...

    对于高考志愿填报的问题,众多考生或多或少都有一些难以解决的问题,有人问到文科生是否能申报计算机类相关专业,今天小编就为各位考生详细解答这个问题. 高考志愿填报时,文科生能申报计算机类相关专业吗? 最先 ...

  8. 2018年陕西文科生可以报计算机专业am,2018年高考志愿:文科生,可以报考哪些专业!...

    原标题:2018年高考志愿:文科生,可以报考哪些专业! 文科生一直以来就业情况都不容乐观,家长和考生对于文理选择都比较头疼,既然选了文科,不要迷茫,挑一个好专业,一样有好的就业前景.在数以百计的文科专 ...

  9. 2020高考报计算机专业指南,2020高考志愿填报最全攻略

    高考结束后,如何填报志愿.如何选择专业与学校是摆在很多家长和考生面前的一道难题.俗话说"七分考,三分报",每年都有很多考生因为高分低报而浪费分数,或者因为低分高报而与大学失之交臂, ...

最新文章

  1. 求数组当中子数组最大和
  2. python自动登录校园网 密码_python实现校园网自动登录的示例讲解
  3. DL之PanopticFPN:Panoptic FPN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  4. python(numpy,pandas11)——pandas merge根据索引合并数据
  5. Linux下oracle全库导出,Oracle数据库导出导入
  6. AI视觉,视频云新挑战的解决之道
  7. SAP Spartacus delivery mode页面Cannot find control with的错误消息
  8. ps42k20服务器出现问题_天高客户端访问软件出现“服务器操作系统原因”问题解决方法...
  9. 【直男福音】7款破解版APP,助你早日脱单
  10. 二十四节气之夏至养生篇
  11. C 语言 —— 命名规则
  12. 微信小程序获取用户微信绑定手机号
  13. python转换整数_在Python中将数字转换为整数列表
  14. 【程序设计训练】棋盘
  15. Mysql-ERROR:1055错误修复
  16. PCB电路板如何设计散热
  17. 程序员进阶攻略-笔记-051~061(完)
  18. 软件工程导论—总体设计
  19. Day005 - 循环练习与列表基础
  20. 学习OpenCV(中文版)

热门文章

  1. uni-app入门教程(9)字体库、自定义组件、打包和新闻实战
  2. javascript动态网页制作
  3. 临床预测模型评鉴(PMID: 32695060)
  4. 【论文学习】ASVspoof 2015 the First Automatic Speaker Verification Spoofing and Countermeasures Challenge
  5. 富盛Sbo插件集Ver1.2.0 简介及免费下载
  6. 创建一个带参数的formgoup_基于原生Fabric-SDK-Go 实现一个简单的学历征信系统,状态数据库使用 CouchDB 来实现...
  7. Python该怎样学?大家是如何快速掌握Python的?(非常详细)
  8. 外卖投资开店2018年有点坑
  9. BATH - 国内汽车操作系统布局
  10. SSHFS--Linux快速挂载