主要是分享思路,代码在Github链接自行获取
获取内容:
- 招生计划(专业名称,学科门类,计划招生,学制)
- 专业分数线(专业名称,录取批次,平均分最低分/最低位次)
- 每年的分数线(年份,录取批次,招生类型,最低分/最低位次,省控线)
- 学校基本信息(学校id,名字 ,类型,科类 ,级别,位置,以及招生咨询官网
希望能给你提供帮助吧
用到的库:
pip3 install json,fake_useragent,requests #第二个可有可无
分析爬取:
1:网站采取Ajax数据
2:数据分析
一共基本框架
这是学习爬虫时自己写的一个思维导图可以根据这个为基础分析
第一次写爬虫望得到些建议
学校基本信息请求分析
Request URL部分:https://api.eol.cn/gkcx/api/?为主链接后面就是请求载荷,请求载荷在后面request payload详情
请求headers得到
"Host": "api.eol.cn",
"Referer": "https://gkcx.eol.cn/school/search",
"User-Agent" #这里我引用了from fake_useragent import UserAgent随机设置了显得比较装逼嘿嘿
以及请求载荷里面的参数
"access_token": "",
"admissions": "",
"central": "",
"department": "",
"dual_class": "",
"f211": "",
"f985": "",
"is_doublehigh": "",
"is_dual_class": "", "keyword": "",
"nature": "",
"page": f"{page}",
"province_id": "",
"ranktype": "",
"request_type": 1,
"school_type": "",
"size": 20,
"sort": "view_total",
"top_school_id": "[766]",
"type": "",
"uri": "apidata/api/gk/school/lists"
"page"则是获取学校内容页数 一页有20条学校信息格式化一下做给循环即可批量提取
(详情看完整代码)
try:
open_url = requests.post(url, data=j.dumps(reque_pay), headers=headers)
if open_url.status_code == 200:
return open_url.json()
except requests.ConnectionError as e:
print("error", e.args)
对url https://api.eol.cn/gkcx/api/? 进行post请求即可获得
请求后得到信息
得到是json格式信息用get()方法定位到item即可
def news(json):
if json:
items = json.get("data")
items_new = items.get("item")
# print(items_new)
for i in items_new:
news_school = {}
news_school["学校id"] = i.get("school_id")
news_school["名字"] = i.get("name")
# news_school["人气值"] = i.get("view_total")
news_school["类型"] = i.get("type_name")
news_school["科类"] = i.get("level_name")
news_school["级别"] = i.get("dual_class_name") + "|" + i.get("nature_name")
news_school["位置"] = i.get("address")
news_school["招生咨询网站"] = i.get("answerurl")
yield news_school
利用for循环一共的取出相关内容即可yield生成最后的获取的内容字典
招生计划
专业分数线
每年的分数线
这三给信息根据以上思路去写 请求参数多出来了学校id,年份,学科等其他参数
学校id根据前面获取学校信息即可提取传入做同步获取 年份,学科类,地方id自己可以设置
保存格式josn我写的可能有些问题 你们可以自行更改