Python 助你填写高考志愿

最近一周一直在帮家里小弟看高考志愿,所以更新的没那么频繁了,请大家见谅。在看各高校的往年分数时,忍不住手痒,想着能不能给它爬下来?哈哈,说干就干!1 流程分析之前无意中在这个网站发现有各个高校的历年录取分数线:https://gkcx.eol.cn。我们的目标是用 Python 将下面页面的数据导出到 Excel:这个页面的 URL 是:https://gkcx.e...
摘要由CSDN通过智能技术生成

最近一周一直在帮家里小弟看高考志愿,所以更新的没那么频繁了,请大家见谅。

在看各高校的往年分数时,忍不住手痒,想着能不能给它爬下来?哈哈,说干就干!

1 流程分析

之前无意中在这个网站发现有各个高校的历年录取分数线:https://gkcx.eol.cn

我们的目标是用 Python 将下面页面的数据导出到 Excel:

南京邮电大学

这个页面的 URL 是:https://gkcx.eol.cn/schoolhtm/schoolTemple/school160.htm,显然是需要一个 school_id 拼接而成的,那么如何获取这个 school_id 呢?

除非想办法爬取到所有院校的 school_id,这里我想着是从上面图中的搜索框进入:

搜索结果

这样,整体的业务流程我们就理清楚了:

  • 先调用搜索的 URL 获取到高校的 school_id,拼接到高校的详情访问地址
  • 访问详情地址,抓取目标数据
  • 处理目标数据,存储到 Excel 中

2 获取 school_id

按下 F12,可以看出搜索调用的 URL 是:https://gkcx.eol.cn/soudaxue/queryschool.html?&keyWord1=南京邮电大学,但是我们发现该请求的 response 里并没有高校列表,所以猜测这里是有二次数据请求获取到高校的列表,然后解析显示到页面的。

顺着请求流,我们看到了这么一个请求:

获取高校列表

并且它的 response 刚好是一个包含高校信息的 json,到这里应该还是顺利的,我们只要从这个 json 里解析出我们想要的东西,然后继续后面的步骤就可以了。要注意该请求的 Referer

但是在解析这个 json 时会遇到一个小问题,返回的数据格式是这样的:

({
   
 "totalRecord": {
   "num": "2"},
 "school":  [
    {
   
   "schoolid": "160",
   "schoolname": "南京邮电大学",
...
});

它是被 (); 包围着的,不是一个合法的 json 数据,这里需要对其进行处理后才能解析 json:

    # 返回数据包含 ();,需要特殊处理
    text = ((response.text).split(');',1)[0]).split('(',1)[1]
    j = json.loads(text
  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
好的,以下是一个基于Python和MySQL的高考志愿填报系统的代码示例。这个系统将用户输入的成绩和志愿存储在MySQL数据库中,并根据数据库中的学校和专业录取分数线,推荐最优的填报方案。 首先,我们需要安装MySQL数据库和Python的MySQL驱动程序。可以使用以下命令来安装: ``` pip install mysql-connector-python ``` 接下来,我们需要创建一个MySQL数据库,可以使用以下命令来创建: ``` CREATE DATABASE gaokao; ``` 然后,我们需要创建一个名为“students”的表,用于存储学生的成绩和志愿。可以使用以下命令来创建: ``` CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), score INT, first_choice VARCHAR(255), second_choice VARCHAR(255), third_choice VARCHAR(255) ); ``` 接下来,我们可以使用以下Python代码来连接MySQL数据库,并向其中插入一条记录: ```python import mysql.connector # 连接MySQL数据库 mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="gaokao" ) # 插入一条记录 mycursor = mydb.cursor() sql = "INSERT INTO students (name, score, first_choice, second_choice, third_choice) VALUES (%s, %s, %s, %s, %s)" val = ("张三", 650, "清华大学", "北京大学", "复旦大学") mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "record inserted.") ``` 接下来,我们可以使用以下Python代码查询数据库中的数据,并根据录取分数线推荐填报方案: ```python # 查询数据库中的数据 mycursor = mydb.cursor() mycursor.execute("SELECT * FROM students") myresult = mycursor.fetchall() # 根据录取分数线推荐填报方案 for x in myresult: score = x[2] first_choice = x[3] second_choice = x[4] third_choice = x[5] choices = [first_choice, second_choice, third_choice] recommended_choice = None max_score = 0 for choice in choices: if choice in schools and score >= schools[choice]: if schools[choice] > max_score: max_score = schools[choice] recommended_choice = choice elif choice in majors and score >= majors[choice]: if majors[choice] > max_score: max_score = majors[choice] recommended_choice = choice if recommended_choice: print('{}的最优填报方案是{}。'.format(x[1], recommended_choice)) else: print('{}的成绩和填报志愿无法推荐最优方案。'.format(x[1])) ``` 注意,这个示例代码并不完整,还需要根据实际情况进行修改和完善。同时,这个系统的推荐方案也仅仅是基于简单的分数线比较,并没有考虑到学校和专业的具体情况,因此仅供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值