前言
为了更好的掌握数据处理的能力,因而开启Python网络爬虫系列小项目文章。
- 小项目小需求驱动,每篇文章会使用两种以上的方式(Xpath、Bs4、PyQuery、正则等)获取想要的数据。
- 博客系列完结后,将会总结各种方式。
一、需求
-
获取高校数据
- 高校排行(软科综合、校友会综合、武书连)
- 基本信息(博士点、硕士点、创建时间、占地面积、学校地址)
-
多种数据存储方式
-
本地文件存储
-
redis
-
MongoDB
-
二、分析
F12 打开抓包工具,刷新https://www.gaokao.cn/school/search接口页面

name.json 接口包含所有的高校id

进入学校详情页,获取到info.json接口信息

数据可以直接通过请求接口即可返回
已获取学校id(一共2820个数据,可以用上协程异步访问提高获取的数据的速度)
已获取学校信息的接口https://static-gkcx.gaokao.cn/www/2.0/json/live/v2/school/102/info.json(只需要修改下学校id即可访问其它学校信息)
三、处理
编写获取大学id的接口
import requests
import json
HEADERS = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"}
# 获取大学school_id
def get_school_id():
url= "https://static-data.gaokao.cn/www/2.0/school/name.json"
res = requests.request("GET",url=url,headers=HEADERS)
res.encoding = "utf-8"
# 转为json格式
data = json.loads(res.text)
return data
获取一次以后,本地可以进行处理提取学校id
import re
def get_id():
f = open("name.txt", "r", encoding="utf-8")
f1 = f.read()
deal = re.compile(r"'school_id': '(?P<id>.*?)'",re.S)
result = deal.findall(f1)
# print(len(result))
f.close()
return result
编写访问学校信息的接口请求
def get_school_info_1():
url = "https://static-data.gaokao.cn/www/2.0/school/3419/info.json"
res = requests.request("GET",url=url,headers=HEADERS)
res.encoding = "utf-8"
# 转为json格式
data = json.loads(res.text)
return data
协程异步访问接口请求(本地文件存储)
import asyncio
import aiohttp
import aiofiles
# 获取学校详细信息
async def get_school_info(url,sem):
try:
async with sem:
async with aiohttp.ClientSession() as session:
# 发送请求
async with session.get(url) as res

本文开启Python网络爬虫系列小项目,以获取高校数据为需求,包括高校排行和基本信息,采用多种数据存储方式。通过抓包分析获取接口信息,编写接口请求代码,使用协程异步访问提高速度,还解决了Redis报错问题,最后展示运行效果并附上源码。
最低0.47元/天 解锁文章
1549

被折叠的 条评论
为什么被折叠?



