助力高考,利用python获取本专科专业选考科目要求

发布于:2025-06-28 ⋅ 阅读:(19) ⋅ 点赞:(0)

大家好,今天我们来利用python技术助力高考,获取网上的本专科专业选考科目要求,用到的Python模块有:Requests、Json、BeautifulSoup、Pandas ,主要思路是Requests获取接口请求,利用BeautifulSoup 解析网站的数据,最后利用Pandas库生成Excel文件。本期我们来获取江苏省,历史类的所有高校的专业选考科目要求实现的结果展示如下:

截屏2024-06-15 下午7.07.07

截屏2024-06-15 下午7.10.11

下面我们就来看看如何实现:

首先打开网址我们按F12检查网站信息,我们选择江苏,首选科目选择历史,点击查询 浏览器 NetWork中就会显示出调用的URL,和相对应的请求参数

截屏2024-06-15 下午9.23.50

请求参数,经过分析 我们可以得出 江苏代码32 ,历史类代码08 记住这个在后面查看详情里面用到。

截屏2024-06-15 下午7.14.44

这时我们通过requests请求就能得到系统返回的json数据。

下面我们来分析详情的参数:

yxdm为学校编码,yxmc为学校名称,xkm为所选科目:08代表历史

截屏2024-06-15 下午9.08.48

我们利用BeautifulSoup模块进行解析,最终提取出所有的信息导出到excel。

截屏2024-06-15 下午7.21.36

具体实现代码如下:

import requests
from urllib.parse import urlencode
from urllib.parse import unquote
import time
import hashlib
import pandas as pd
import random
from bs4 import BeautifulSoup
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}
​
json_data = {
    'ssdm': '32',
'sxkm': '08',
'kskms': '',
'xkml': '',
'qttj': '',
'cxtj': ''
}
​
def get_xk(yxdm, ssmc, zswz,dq):
    list = []
    url = 'https://xkcx2024/xxdetail.jsp?yxdm={}&yxmc={}&sxkm=08&kskms=&qttj=&cxtj=&xkml='.format(
        yxdm, ssmc)
    response = requests.post(url, headers=headers)
    content = response.text
    page = BeautifulSoup(content, 'html.parser')   
    for trs in page.findAll('tr'):
        for tds in trs.findAll('td'):
            list.append(tds.text)
​
    chunks = 7
    chunks_list = [list[i:i + chunks] for i in range(0, len(list), chunks)]
    lists_with_new_element = [sublist + [yxdm, ssmc, zswz, '历史',dq] for sublist in chunks_list]
    print(lists_with_new_element)
    result.extend(lists_with_new_element)
    print(yxdm+':'+ssmc+':已下载...'
​
​
if __name__ == '__main__':
    result=[]
    title = ['序号', '层次', '专业(类)名称', '首选科目', '再选科目及选考要求', '所含专业和代码', '招考方向', '学校代码', '学校名称', '学校网址', '首选科目','地区']
    response = requests.post('https://xkcx2024/GetYxxxServlet', headers=headers,data=json_data)
    data = response.json()
    schools=data['yxs']
    for  school in schools:
        random_time = random.uniform(1, 2)
        time.sleep(random_time)
        dm=school['yxdm']
        mc=school['yxmc']
        wz=school['zswz']
        dq=school['ssmc']
        get_xk(dm, mc, wz,dq)        
    df = pd.DataFrame(result, columns=title)
    df.to_excel('历史类选科.xlsx', index=False)
    print('done')

希望得到大家的关注和点赞,我们下期见。


网站公告

今日签到

点亮在社区的每一天
去签到