怎么用Python爬取学校专业的数据
发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,本篇文章给大家分享的是有关怎么用Python爬取学校专业的数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言今天各地的2020年高考
千家信息网最后更新 2025年01月26日怎么用Python爬取学校专业的数据
本篇文章给大家分享的是有关怎么用Python爬取学校专业的数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
前言
今天各地的2020年高考成绩陆续可以查询了,考生的志愿填报也随即提上日程。
俗话说,七分考,三分报。想必同学们一定不想因高分低报而浪费分数,也不想低分高报而与大学失之交臂。
如何获取数据
我们使用Python获取了中国教育在线网站的高校数据,共2904条。以下展示数据获取部分代码:
https://gkcx.eol.cn/school/search
具体思路如下:
分析网页,通过翻页可以发现数据是动态加载的,因此通过Chrome浏览器进行抓包分析获取真实的URL请求地址,并确定请求方式(get还是post);
使用requests请求网页数据;
使用json解析并提取数据;
使用pandas将数据保存到本地
首先打开网址,使用Chrome浏览器的检查功能,切换到Network-XHR,点击翻页进行网络数据抓包,很容易发现数据都是被封装在json中的,如下图所示:
切换到Headers处,确定请求的方法为post请求,得到数据请求的URL地址,其中page参数代表页数,通过遍历即可获取所有数据。代码如下:
# 导入包import numpy as npimport pandas as pdimport requestsimport jsonfrom fake_useragent import UserAgentimport time# 获取一页def get_one_page(page_num): # 获取URL url = 'https://api.eol.cn/gkcx/api/' # 构造headers headers = { 'User-Agent': UserAgent().random, 'Origin': 'https://gkcx.eol.cn', 'Referer': 'https://gkcx.eol.cn/school/search?province=&schoolflag=&recomschprop=', } # 构造data data = { 'access_token': "", 'admissions': "", 'central': "", 'department': "", 'dual_class': "", 'f211': "", 'f985': "", 'is_dual_class': "", 'keyword': "", 'page': page_num, 'province_id': "", 'request_type': 1, 'school_type': "", 'size': 20, 'sort': "view_total", 'type': "", 'uri': "apigkcx/api/school/hotlists", } # 发起请求 try: response = requests.post(url=url, data=data, headers=headers) except Exception as e: print(e) time.sleep(3) response = requests.post(url=url, data=data, headers=headers) # 解析获取数据 school_data = json.loads(response.text)['data']['item'] # 学校名 school_name = [i.get('name') for i in school_data] # 隶属部门 belong = [i.get('belong') for i in school_data] # 高校层次 dual_class_name = [i.get('dual_class_name') for i in school_data] # 是否985 f985 = [i.get('f985') for i in school_data] # 是否211 f211 = [i.get('f211') for i in school_data] # 办学类型 level_name = [i.get('level_name') for i in school_data] # 院校类型 type_name = [i.get('type_name') for i in school_data] # 是否公办 nature_name = [i.get('nature_name') for i in school_data] # 人气值 view_total = [i.get('view_total') for i in school_data] # 省份 province_name = [i.get('province_name') for i in school_data] # 城市 city_name = [i.get('city_name') for i in school_data] # 区域 county_name = [i.get('county_name') for i in school_data] # 保存数据 df_one = pd.DataFrame({ 'school_name': school_name, 'belong': belong, 'dual_class_name': dual_class_name, 'f985': f985, 'f211': f211, 'level_name': level_name, 'type_name': type_name, 'nature_name': nature_name, 'view_total': view_total, 'province_name': province_name, 'city_name': city_name, 'county_name': county_name, }) return df_one# 获取多页def get_all_page(all_page_num): # 存储表 df_all = pd.DataFrame() # 循环页数 for i in range(all_page_num): # 打印进度 print(f'正在获取第{i + 1}页的高校信息') # 调用函数 df_one = get_one_page(page_num=i+1) # 追加 df_all = df_all.append(df_one, ignore_index=True) # 随机休眠 time.sleep(np.random.uniform(2)) return df_allif __name__ == '__main__': # 运行函数 df = get_all_page(all_page_num=148)
通过上述程序,共获取到2904条数据,数据预览如下:
df.head()
以上就是怎么用Python爬取学校专业的数据,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
数据
专业
学校
代码
函数
地址
更多
浏览器
知识
篇文章
类型
网页
部分
页数
分析
切换
浏览
失之交臂
低分
俗话
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库中字段有哪些
mysql数据库不同步怎么办
山东软件开发多不多
江西省网络安全通报
网络安全宣传主题团会记录
数据库关联图用什么画
win7的网络安全密钥
筑牢网络安全稿件
用kali探测局域网数据库
安卓车机软件开发
软件开发中心有哪些岗位
数据库开放共享
ie浏览器服务器地址打不开
徐汇区市场软件开发诚信合作
imperial软件开发
魔兽世界服务器社区在哪里
广州聊天软件开发多少钱
合肥交通软件开发公司哪家好
服务器上怎么添加无线网卡
升级服务器还要钱吗
软件开发和软件销售合伙
数据库的备份和还原实验总结
软件开发系统例子
青岛互联网科技公司
手机网络安全龙头600410
情报驱动的网络安全
js 连接数据库好不好
只获得年月的数据库方法
数据库中的规范化定义
ie浏览器服务器地址打不开