快高考了,有什么学校可以报?通过爬虫获取学校信息

编程入门 行业动态 更新时间:2024-10-11 01:09:49

快高考了,<a href=https://www.elefans.com/category/jswz/34/1771212.html style=有什么学校可以报?通过爬虫获取学校信息"/>

快高考了,有什么学校可以报?通过爬虫获取学校信息

需求分析

今天是端午节,本来应该高高兴兴的吃吃粽子,过过节,但是呢,没想到妹妹今日很忧愁,连饭都吃不下了。我很担心,问她怎么了

她说,“仙草哥哥,马上就要高考了,有什么学校可以报呢?现在疫情我不想离家太远,本地有没有好的学校呢?学校发的手册上的内容查阅起来太困难了!”

有什么学校,那我可不知道啊,别说全国了,就连本地有几所大学我都数不明白呢。不过好在,就是获取学校信息嘛,这难不倒我,使用python的爬虫来实现就好了

注意:本次我采用的地址是阳光高考中的院校查询,其中已经明确给出了名单中不包括港澳台等地区的学校

页面分析

打开阳光高考中的院校查询,我们能够看到其中有很多信息

其中院校名称,所在地,学历层次,满意度等等都是文字内容,并不难获取。其中唯一不一样的在于“双一流”和“研究院”,这里没有文字,而是通过一个对号的符号作为标记的。因此,这里要和其他项不同,有符号标记的,就记录为是,没符号标记的就记录为否

目前总共有138页,每一页显示20个,总共大概有2750多所学校,还是非常多的,那么就从第一页开始,一直往后边获取,直到某一页中不足20个学校,就说明结束了。当然,如果我们获取到了全部的数据也可以对其进行简单的分析,例如挑选出满意度高的学校,某个地区的全部学校等等。当然我自己只准备获取一下全部学校的信息

实现分析

首先导入requests模块,并且构造一个url地址

import requests# 这里应当填写的是从第多少个学校开始
url = ",option-qg,\searchType-1,start-{此处可变}.dhtml"

然后通过该url的响应,解析其中的内容

from lxml import etreehtml = etree.HTML(r.text)info = {"院校名称": html.xpath("//td[1]/a/text()"),               "院校所在地": html.xpath("//td[2]/text()"),               "教育行政主管部门": html.xpath("//td[3]/text()"),             "学历层次": html.xpath("//td[4]/text()")                      
}

通过判断页面中的学校数量是否小于20,来确定是否到了最后一页

if (len(html.xpath("//tr")) < 20):print("已经达到结尾")

最后将获取到的所有数据,通过json进行保存,完成记录

with open("school.txt", "w") as f:f.write(json.dumps(info))

注意:以上的所有代码,并非为完整的真实代码,而是去掉了复杂部分的简化后的代码,仅为演示整个程序的流程结构

完整代码示例

"""
作者:sagegrass
程序名:高等学校信息爬取
联系方式:sagegrass@outlook
创建时间:2022-06-03
更新时间:2022-06-03
"""import requests
import re
import json
import time
from lxml import etreeschool = list()
num = 0try:while True:url = f",option-qg,searchType-1,start-{num}.dhtml"r = requests.get(url, headers={"user-agent": "Mozilla 5.0"}, timeout=10)for s in (t := etree.HTML(r.text).xpath("//table[@class='ch-table']/tr")[1::]):if len(t) <= 1:breakschool.append({"院校名称": re.sub("\s", "", s.xpath("./td[1]/a/text()")[0] if len(s.xpath("./td[1]/a/text()")) else s.xpath("./td[1]/text()")[0]),"院校所在地": re.sub("\s", "", s.xpath("./td[2]/text()")[0]),"教育行政主管部门": re.sub("\s", "", s.xpath("./td[3]/text()")[0]),"学历层次": re.sub("\s", "", s.xpath("./td[4]/text()")[0]),"双一流建设高校": "是" if len(s.xpath("./td[5]/i/text()")) else "否","研究生院": "是" if len(s.xpath("./td[6]/i/text()")) else "否","满意度": re.sub("\s", "", s.xpath("./td[7]/a/text()")[0]) if len(s.xpath("./td[7]/a/text()")) > 0 else "--"})else:num += 20print(f"已经完成{num}个学校啦!")time.sleep(1)continueprint("恭喜,已经全部完成了!")assert(False)
except Exception as e:with open("院校记录.json", "w") as f:f.write(json.dumps(school, indent=2, ensure_ascii=False))if not isinstance(e, AssertionError):raise

程序运行结果展示

 


完整的程序以及使用说明已经上传至github,这里是该项目github链接地址​​​​​​​

如需下载,可以通过git直接下载

git clone .git

多数爬虫程序很快就会由于对方地址和服务变化导致失效,因此无法保证当你看到这篇文章时,文中的程序仍然可以使用。如果文中的程序已失效,需要自行或者求助他人进行重写

另外,切勿将爬虫程序用于非法用途,或者错误的滥用造成对方网站的负担,谢谢!

更多推荐

快高考了,有什么学校可以报?通过爬虫获取学校信息

本文发布于:2024-02-25 12:38:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1698992.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:有什么   学校   爬虫   考了   信息

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!