python爬取考研网的信息

2023-11-19

今天我们使用python来爬取考研网站的信息。


目标网站:

https://yz.chsi.com.cn/zsml/queryAction.do


使用的库:

requests,bs4,pandas


这些库统一可以使用pip进行统一安装

pip install requests

pip install bs4

pip install pandas


安装完之后我们便可以进行信息的爬取了

首先,我们去考研网上查看一下网站的头部信息:

640?wx_fmt=png


使用开发者模式,在请求里面找到请求头部的信息。

我们需要把user-agent提取出来:

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKi"
             "t/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"


首先我们需要获取三个字段的接口数据,分别是:省份,学科,专业编号

http://yz.chsi.com.cn/zsml/pages/getSs.jsp

640?wx_fmt=png

http://yz.chsi.com.cn/zsml/pages/getMl.jsp

640?wx_fmt=png

http://yz.chsi.com.cn/zsml/pages/getZy.jsp

640?wx_fmt=png



下面我们来获取一个学校的网址:

url = "http://yz.chsi.com.cn/zsml/queryAction.do"
data = {
"ssdm": self.province,
   "yjxkdm": self.category,
}
response = requests.post(url, data=data, headers=self.head)
html = response.text
reg = re.compile(r'(<tr>.*? </tr>)', re.S)
content = re.findall(reg, html)
schools_url = re.findall('<a href="(.*?)" target="_blank">.*?</a>', str(content))


我们使用正则表达式获取tr标签里面的内容

对于获取的内容,我们统一只获取a标签中的超链接,这就是对应的学校的网址

 (.*?万能匹配表达式,匹配目标元素0次或者多次,懒惰模式)


下面我们要干的事情是获取一个学校的所有数据

拿到学校的url之后,我们可以再次通过正则表达式获取学校网站上所有的有用的内容。

response = requests.get(url, headers=self.head)
html = response.text
colleges_url = re.findall('<td class="ch-table-center"><a href="(.*?)" '
                         'target="_blank">查看</a>', html)



下面我们通过已经获取的school_url和colleges_url去获取所有学校的数据

url = "http://yz.chsi.com.cn"
schools_url = self.get_school_url()
amount = len(schools_url)
i = 0
for school_url in schools_url:
i += 1
   url_ = url + school_url
# 找到一个学校对应所有满足学院网址
   colleges_url = self.get_college_data(url_)
print("已完成第" + str(i) + "/" + str(amount) + "学院爬取")
time.sleep(1)
for college_url in colleges_url:
_url = url + college_url
get_final_data(_url)

最后利用pandas将获取的数据转化成csv格式存储:

data = DataFrame(self.data)
data.to_csv("查询招生信息.csv", encoding="utf_8_sig")


这样我们就可以获取所有的学校的考研专业的数据啦!

640?wx_fmt=png

640?wx_fmt=png

对于北京的一些大学,就有近900条信息

对于自己想看哪个学校,只需要给定相应的省份编号和专业代码就可以查询。


现在我们可以优化一下代码,我们将之前的代码都封装在方法里面。


import requests
from bs4 import BeautifulSoup
from pandas.core.frame import DataFrame
import re
import time

class Graduate:
def __init__(self, province, category):
self.head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKi"
                         "t/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
       }
self.data = []
self.province = province
self.category = category

def get_list_fun(self, url, name):
"""获取提交表单代码"""
       response = requests.get(url, headers=self.head)
province = response.json()
with open("{}.txt".format(name), "w") as f:
for x in province:
f.write(str(x))
f.write("\n")

def get_list(self):
       self.get_list_fun("http://yz.chsi.com.cn/zsml/pages/getSs.jsp", "province")
self.get_list_fun('http://yz.chsi.com.cn/zsml/pages/getMl.jsp', "category")
self.get_list_fun('http://yz.chsi.com.cn/zsml/pages/getZy.jsp', 'major')

def get_school_url(self):
       url = "http://yz.chsi.com.cn/zsml/queryAction.do"
       data = {
"ssdm": self.province,
           "yjxkdm": self.category,
       }
response = requests.post(url, data=data, headers=self.head)
html = response.text
reg = re.compile(r'(<tr>.*? </tr>)', re.S)
content = re.findall(reg, html)
schools_url = re.findall('<a href="(.*?)" target="_blank">.*?</a>', str(content))
return schools_url

def get_college_data(self, url):
"""返回一个学校所有学院数据"""
       response = requests.get(url, headers=self.head)
html = response.text
colleges_url = re.findall('<td class="ch-table-center"><a href="(.*?)" '
                                 'target="_blank">查看</a>', html)
return colleges_url

def get_final_data(self, url):
"""输出一个学校一个学院一个专业的数据"""
       temp = []
response = requests.get(url, headers=self.head)
html = response.text
soup = BeautifulSoup(html, features='lxml')
summary = soup.find_all('td', {"class": "zsml-summary"})
for x in summary:
temp.append(x.get_text())
self.data.append(temp)

def get_schools_data(self):
"""获取所有学校的数据"""
       url = "http://yz.chsi.com.cn"
       schools_url = self.get_school_url()
amount = len(schools_url)
i = 0
       for school_url in schools_url:
i += 1
           url_ = url + school_url
# 找到一个学校对应所有满足学院网址
           colleges_url = self.get_college_data(url_)
print("已完成第" + str(i) + "/" + str(amount) + "学院爬取")
time.sleep(1)
for college_url in colleges_url:
_url = url + college_url
self.get_final_data(_url)

def get_data_frame(self):
"""将列表形数据转化为数据框格式"""
       data = DataFrame(self.data)
data.to_csv("查询招生信息.csv", encoding="utf_8_sig")


if __name__ == '__main__':
# province = input("请输入查询学校省份编号:")
   # category = input("请输入查询专业代码:")
   province = "11"
   category = "0812"
   spyder = Graduate(province, category)
spyder.get_schools_data()
spyder.get_data_frame()


所有代码都放在GitHub,代码地址:

https://github.com/johnturingwu/helloworld/blob/master/kaoyan.py

点击阅读原文可直达。


喜欢的可以点个赞。



640?wx_fmt=gif

“扫一扫,获取更多信息”


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取考研网的信息 的相关文章

  • 独家

    作者 Damir Yalalov 翻译 陈超 校对 赵茹萱 本文约1100字 建议阅读5分钟 本文介绍了ChatGPT如何解决简单的机器学习任务并给出了鸢尾花分类和城市预测两个案例 一句话概括 ChatGPT可以帮助你完成简单的机器学习任务
  • ldconfig: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link

    libcuda so
  • 【宠粉福利】这次我们准备了 iPhone 12、AirPods Pro、罗技鼠标等大礼等你来领!...

    喜迎开学季 C 站开豪礼 最高可开 iphone 12 盲盒开出的不只是一份礼物 更是对于一切美好的期待 拆开一个盲盒 就像开始一场未知的爱丽丝梦游仙境 为 两点一线 朝九晚九 的生活 埋下一刻期待的种子 去收获一份未知的惊喜 这次 价格再
  • CentOS 7 关闭网络限制

    1 安装CentOS 7 3操作系统mini版本即可 2 设置关闭Selinux 编辑 etc selinux config vi etc selinux config SELINUX disabled 重启机器 查看selinux状态 s
  • C++中的namespace

    namespace中文意思是命名空间或者叫名字空间 传统的C 只有一个全局的namespace 但是由于现在的程序的规模越来越大 程序的分工越来越细 全局作用域变得越来越拥挤 每个人都可能使用相同的名字来实现不同的库 于是程序员在合并程序的
  • 手撕计算机网络——应用层(四):P2P

    前言 进入应用层学习也有了一段时间了 接下来的这篇文章中小荔枝会将应用层P2P结构体系于我们客户 端系统体系在分发文件中的机理进行整理 希望今天能结束应用层学习哈哈哈 运输层我来啦 目录 前言 一 P2P的自拓展性 二 BitTorrent
  • 【高德地图API】从零开始学高德JS API(八)——地址解析与逆地址解析

    摘要 无论是百度LBS开放平台 还是高德LBS开放平台 其调用量最高的接口 必然是定位 其次就是地址解析了 又称为地理编码 地址解析 就是将地址转换为经纬度 而逆地址解析 就是将经纬度转换为地址 经纬度一般是由专业测绘机构用GPS采集 然后
  • Shell——脚本执行命令和控制语句

    前言 在正常情况下 shell按顺序执行每一条语句 直至碰到文件尾 if选择结构示例 if后面紧跟判断条件 then后面是执行语句 fi是结束标志 多重if结构示例 case多选结构 通常用于在一系列模式中匹配某个变量的值 命令 只在cas
  • CH7-查找

    文章目录 1 查找的基本概念 2 线性表的查找 2 1 顺序查找 线性查找 算法2 1 0 类型定义 算法2 1 1 顺序查找 算法2 1 2 改进后的顺序查找 性能分析 2 2 折半查找 二分或对分查找 算法2 2 1 非递归算法 算法2
  • 基于容器PaaS云技术平台方案

    本文以容器技术建设 PaaS 平台即服务 云平台的解决方案为例 分析其如何实现系统资源的集中管理 动态分配 监控 共享和调度 如何实现应用的统一部署和业务连续性保障 实现多数据中心的高可用 推动系统架构及流程的调整 应对云计算时代所带来的变
  • 分析研究<<一战到底>>节目规则演变

    分析研究 lt lt 一战到底 gt gt 节目规则演变 一 研究范围 江苏卫视2012年3月2日推出益智答题类节目 研究时间截止 2014年1月4日星期六 二 规则演变 1 初始规则 2012年3月2日规则 1 每期参加节目的有11人 分
  • 01-ZooKeeper快速入门

    1 Zookeeper概念 Zookeeper是Apache Hadoop项目下的一个子项目 是一个树形目录服务 zookeeper翻译过来就是 动物园管理员 它是用来管理Hadoop 大象 Hive 蜜蜂 Pig 小猪 的管理员 简称ZK
  • C语言程序设计 现代方法(第2版)电子书pdf下载

    C语言程序设计 现代方法 第2版 下载链接 https pan baidu com s 1XIKYGAxGhRTscgibAj3kgQ 提取码获取方式 关注下面微信公众号 回复关键字 1129
  • 关于猜数字游戏以及关机指令

    这几天学习到了一些没有接触过的东西 因此在这里记录下 首先是猜数字游戏 这个小程序特别简单 只要知道相关的几个关键函数就能明白 它的主要函数有rand 返回随机数 以及srand 用来设置随机数的起点 以及time 代码如下 include
  • 【QTUM量子链中国区】零撸180元攻略

    QTUM量子链中国区 于2020年1月7日正式上线 实名认证 无需上传 通过后赠送体验矿机一台 周期30天 总产量10QTUM 价值130元 进入官方QQ群可以目测到 这个新出的项目非常火爆 问题是 QTUM量子链中国区和著名的QTUM量子
  • ABAP 参照TR创建副本TR并释放

    简介 一般项目中为了后期传输的统一性 都会采用传输副本请求的方式来避免出现一个需求有过多的工作台TR的情况 但是常规的创建副本请求的方式不是很便捷 因此本文介绍一种参照已有TR创建副本TR的样例 效果 代码 Report YSTMS
  • Ljavax/validation/ParameterNameProvider

    利用宝塔部署项目war包出现 Ljavax validation ParameterNameProvider 的错误 初始化org springframework validation beanvalidation OptionalVali
  • day08-Linux自有服务&软件包管理

    自有服务 即不需要用户独立去安装的软件的服务 而是当系统安装好之后就可以直接使用的服务 内置 学习目标 1 了解systemctl命令用途 2 掌握使用systemctl开启 关闭 重启服务 3 了解常见自有服务ntpd firewalld
  • Linux基础学习

    安装gcc 1 apt get命令是debain Linux发新版的APT软件包管理工具 dabian ubuntu deepin等Linux系统通过以下命令 安装gcc Shell输入sudo apt get install gcc命令
  • 4--一元多项式的乘法与加法运算

    个人题解 include

随机推荐

  • JS判断数组中是否有重复的元素

    function isRepeatId arr arr 100 200 400 200 if arr length 1 若元素数为1一定不重复 直接返回 return false var hash for let i in arr 遍历ar
  • C语言的面向对象的封装方法

    1 3 1 变长结构体的实现 以上文数据结构C语言 双向链表及其实现的双向环链为例 具体封装方法如下 在上述双向环链中节点中不可避免地引入了数据指针 void data占用了8byte的空间 那么能不能在链表每个节点中省去这8byte的空间
  • 自下而上分析方法-算符优先,LR(0),SLR,LR(1),LALR大全

    文章目录 自下而上分析法 一 规范规约 相关定义 短语 直接短语 句柄 素短语 最左素短语 语法树表示 示例 规范规约 二 语法分析器 三 算符优先分析算法 算符文法 1 算符优先文法 2 FIRSTVT P 和LASTVT P 1 FIR
  • 金晟富:5.24黄金原油最新行情涨跌分析,黄金原油操作建议

    前言导读 新的一天 新的开始 新的机会 投资路并非坦途 我的文字不华丽 但是却很真诚 财富自由首先是脑袋的距离 然后才是口袋的距离 出现亏损应当去寻找原因 去改变目标处境 不然将会陷入恶性循环 不断的亏损 不断的找理由 赚钱的单拿不住 亏钱
  • docker official tutorial, unable to build images.docker官方教程无法生成镜像

    windows docker 根据dockder的官方tutorial教程 docker build t getting started 这一步无法成功 一直是如下报错 21 53 error An unexpected error occ
  • element-plus 关于按需加载的问题

    完整的引入没什么说的 import createApp from vue import ElementPlus from element plus import element plus lib theme chalk index css
  • 用Python调用OpenAI API做有趣的事

    GPT 迭代过程概要表 版本 发布时间 训练方案 参数量 是否开放接口 GPT GPT 1 2018 年 6 月 无监督学习 1 17 亿 是 GPT 2 2019 年 2 月 多任务学习 15 亿 是 GPT 3 2020 年 5 月 海
  • 数据库2:创建表(头歌云课)

    任务描述 相关知识 如何在指定数据库中创建表 编程要求 测试说明 任务描述 本关任务 在数据库中 创建一个表 相关知识 我们知道数据库就是存储数据的地方 那数据库中的数据到底存放在哪里呢 数据库中的数据是存放在数据库中的一张一张表 你可以想
  • 机器学习数据分析软件:Octave

    最近学习了Octave数学软件 这个软件类似于MATLAB 但是操作要比MATLAB简单很多 上手快 对数据分析有很大的帮助 所以这里就简单的把部分练习的代码放在这里 如果你想实现一下 可以按照代码内容来 或者自己编写 GNU Octave
  • sql注入靶场1-65

    第一关 单引号闭合 order by 判断字段数 显示位2 3 输出数据库版本 id 1 union select 1 2 version 输出数据库名称 id 1 union select 1 2 database 查看所有表名 id 1
  • torch.onnx.export():将pytorch模型转换为.onnx模型

    torch onnx export model args f export params True verbose False training False input names None output names None aten F
  • webpack 的externals配置

    官网解释 webpack 中的 externals 配置提供了不从 bundle 中引用依赖的方式 解决的是 所创建的 bundle 依赖于那些存在于用户环境 consumer environment 中的依赖 怎么理解呢 意思是如果需要引
  • Linux FTP服务

    目录 一 FTP概述 1 Standard模式 主动模式 2 Passice模式 被动模式 二 搭建和配置FTP服务 1 实验环境 2 软件安装 3 设置匿名用户访问FTP服务 4 开启服务 关闭防火墙和增强型安全功能 5 匿名访问测试 1
  • Spring Data JPA中常用的注解详解

    我们先看看类前面的两个注解 Entity 对实体注释 任何Hibernate映射对象都要有这个注释 Table name 自定义的表名 完成表和实体之间的映射 跟上面的注解默认需要配置的 Id 把这个类里面所在的变量设置为主键Id Gene
  • 单片机生成PDF文件(STM32+LIBHARU)

    之前发过一个帖子 是STM32移植了一个pdf库 不过那个库功能比较简单 有很多东西都没有 比如加载图片和文件加密 这次主要是为了文件加密 翻阅了一下资料 单片机做PDF文件 网上资料不是很多 可以说基本上找不着 github上翻源码 翻了
  • windows查看功耗

    可以在Windows系统中查看功耗的方法有以下几种 使用任务管理器 在Windows桌面上按下Ctrl Alt Delete键 选择任务管理器 然后在 性能 选项卡中单击 电源使用情况 查看功耗信息 使用系统监视器 打开系统监视器 在Win
  • java 图片Base64转成文件流,直接在浏览器访问图片

    因为业务 需要把图片base64转成文件流 然后直接在浏览器访问就可以看见图片 回显图片 author liuhengliang return ModelAndView RequestMapping value image private
  • 基于51单片机的温度烟雾报警系统设计

    功能 本实例是基于51单片机的温度烟雾报警系统 主要硬件由51单片机最小系统 LCD1602液晶屏电路 烟雾检测电路 温度感应电路 蜂鸣器报警电路 ADC0832转换电路 LED指示灯电路和按键电路构成 1 LCD1602液晶屏 第一行显示
  • Colab .ipynb 从本地/云端/GitHub 导入并使用.py文件

    1 下载 上传目标文件 1 从GitHub下载所需repo 下载Code 下载 Zip 文件保存到本地 2 上传至云端Google Drive 上传成功后就能在My Drive看到文件夹了 尝试过直接Clone repo到Colab 但是后
  • python爬取考研网的信息

    今天我们使用python来爬取考研网站的信息 目标网站 https yz chsi com cn zsml queryAction do 使用的库 requests bs4 pandas 这些库统一可以使用pip进行统一安装 pip ins