从网上爬取全国大学学校数据2020版(最新版,包含大部分常用字段) 您所在的位置:网站首页 各个大学英文名称 从网上爬取全国大学学校数据2020版(最新版,包含大部分常用字段)

从网上爬取全国大学学校数据2020版(最新版,包含大部分常用字段)

2024-07-11 12:13| 来源: 网络整理| 查看: 265

1. 文章说明

现在跟教育沾边的项目基本上都离不开“学校”的数据,而全国大学的数据网上版本也非常之多,下载了很多个版本,浪费了近100点C币,最终得到的数据都不尽如人意,有些只有学校数据缺少其他重要的字段,有些只有部分学校,缺少很多学校。本篇文章的目的就是为了分享我获取到的最新的全国大学学校数据,数据非常的丰富,字段多达41个,总共2934所,数据来源:中国教育在线

2. 爬取数据样例展示

为了让大家清楚的看到数据本身的样子,这里给出几个示例:

字段字段值字段含义id140系统内部自增IDschool_id_code4111010003学校标识码,全国唯一school_code10003学校招生代码,全国唯一name清华大学学校名称type5000分类编码type_name综合类分类名称school_type6000类型编码school_type_name普通本科类型名称school_nature36000性质编码school_nature_name公办性质名称belong教育部隶属于f9851是否为985学校f2111是否未211学校num_subject39重点学科数量num_master66硕士点数量num_doctor58博士点数量num_academician66院士人数num_library400万藏书数量num_lab61重点实验室数量province_id11所属省份编码province_name北京所属省份名称city_id1101所属市编码city_name北京市所属市名称county_id110108所属区域编码town_name海淀区所属区域名称create_date1911创办年份area5886.00学校占地面积,单位:亩old_name原名short北京清华,清华简称ruanke_rank1wsl_rank1qs_rank1xyh_rank2dual_class_name双一流[email protected]招生办邮箱address北京市海淀区清华园1号学校地址postcode100084邮政编码sitehttp://www.join-tsinghua.edu.cn招生办网址school_sitehttps://www.tsinghua.edu.cn/publish/thu2018/index.html学校官网phone010-62782051,010-62770334招生办电话content清华大学的前身清华学堂始建于1911年,1912年更名为清华学校,略…学校概况

说明:上面有4个学校排名字段笔者暂时还没弄清楚具体是什么维度的排名,如果有知道的可以评论告知一下,不胜感激。

3. 如何爬取

现在把爬取数据的核心代码分享给大家,笔者使用的是Java程序来爬取的,建议大家如果在爬取的时候也要注意每次爬取的间隔,太小有可能会被认定为恶意请求被限制访问。

3.1 选取爬取链接

爬取地址:https://static-data.eol.cn/www/school/1738/info.json

路径参数1738代表中国教育在线内部系统的id,仔细观察下教育在线数据可以发现,这个编码不会太大,如果不放心,可以设置大一点的数据,如3600,用浏览器打开链接 在这里插入图片描述 会发现请求是失败的,大家可以尝试一下3500,是有数据返回的。那么就可以通过1-3500来进行循环的爬取,每次爬取是一所学校的详情。可能有的人会说爬取https://api.eol.cn/gkcx/api/?access_token=&admissions=¢ral=&department=&dual_class=&f211=&f985=&is_dual_class=&keyword=&page=2&province_id=&request_type=1&school_type=&signsafe=&size=20&sort=view_total&type=&uri=apigkcx/api/school/hotlists,笔者最开始是爬取的这个地址,但后来发现,链接太复杂,并且返回的数据没有前者丰富。 3.2 爬取代码 BufferedWriter writer = new BufferedWriter(new FileWriter(new File("D:/school.txt"))); for (int i = 1; i < 3600; i++) { String url = "https://static-data.eol.cn/www/school/1738/info.json"; ResponseEntity results = restTemplate.getForEntity(url, String.class); TimeUnit.SECONDS.sleep(1); String result = results.getBody(); writer.append(result).append("\n"); System.out.println(result); } writer.flush(); writer.close(); 说明:我这个爬取分2步,第一步是爬取数据,将数据写入到D:/school.txt,每所学校的数据以json字符串格式写入到文件中,每所学校占一行。 3.2 写入数据库

首先,将数据从txt文件读取出来,再拼接成sql语句,重新写到sql文件中,最后通过navicat写入到数据库。这种爬取方式可以支持任何数据库,只要写一句insert的模板语句即可。

BufferedReader reader = new BufferedReader(new FileReader("D:/school.txt")); BufferedWriter writer = new BufferedWriter(new FileWriter(new File("D:/school.sql"))); String line = null; String sql="INSERT INTO `usercenter_school` (`school_id`, `data_code`, `name`, `type`, `school_type`, `school_nature`, `belong`, `f985`, `f211`, `num_subject`, `num_master`, `num_doctor`, `num_academician`, `num_library`, `num_lab`, `province_id`, `province_name`, `city_id`, `city_name`, `county_id`, `town_name`, `create_date`, `area`, `old_name`, `short`, `ruanke_rank`, `wsl_rank`, `qs_rank`, `xyh_rank`, `level_name`, `type_name`, `school_type_name`, `school_nature_name`, `dual_class_name`, `email`, `address`, `postcode`, `site`, `school_site`, `phone`, `content`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');"; while (true) { line = reader.readLine(); if (line == null) { break; } JSONObject detail= JSONObject.parseObject(line); String s=String.format(sql, detail.getString("id"), detail.getString("data_code"), detail.getString("name"), detail.getString("type"), detail.getString("school_type"), detail.getString("school_nature"), detail.getString("belong"), detail.getString("f985"), detail.getString("f211"), detail.getString("num_subject"), detail.getString("num_master"), detail.getString("num_doctor"), detail.getString("num_academician"), detail.getString("num_library"), detail.getString("num_lab"), detail.getString("province_id"), detail.getString("province_name"), detail.getString("city_id"), detail.getString("city_name"), detail.getString("county_id"), detail.getString("town_name"), detail.getString("create_date"), detail.getString("area"), detail.getString("old_name"), detail.getString("short"), detail.getString("ruanke_rank"), detail.getString("wsl_rank"), detail.getString("qs_rank"), detail.getString("xyh_rank"), detail.getString("level_name"), detail.getString("type_name"), detail.getString("school_type_name"), detail.getString("school_nature_name"), detail.getString("dual_class_name"), detail.getString("email"), detail.getString("address"), detail.getString("postcode"), detail.getString("site"), detail.getString("school_site"), detail.getString("phone"), detail.getString("content") ); writer.append(s).append("\n"); System.out.println(s); } reader.close(); writer.flush(); writer.close();

经过上面的步骤,就已经生成了sql文件,到此也就水到渠成了。 细心的读者可能已经发现,生成的sql记录,少了学校标识码school_id_code和学校代码school_code字段。从中国教育在线网上爬取的数据中不包含这两个字段,但笔者提供的数据中是包含这两个字段的,笔者是从某某网站上下载的数据,经过表连接手段插入的学校标识码,但还是会有少部分学校不能关联,因此又从某网站手工的查询剩余的学校,将标识码补齐(真的是手工,耗费2小时)。最后是校代码,校代码了解的读者就会知道,校代码是根据标识码生成的,因此有了标识码就自然有了校代码。

4. 获取笔者的完整数据

获取数据方式有两种:

去笔者资源中心下载(笔者整理一份不容易,请给个好评,谢谢)欢迎加入交流群:566654343


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有