本项目依据 MIT 许可证发布,仅供学习和研究使用,所爬取的数据均来自公开且合法的渠道,且项目设计不会对目标网站造成流量攻击或其他负面影响。请确保在合法合规的前提下使用本项目。
作者不对因使用本项目所导致的任何直接或间接后果承担责任。使用者应自行评估风险并对其行为负责。
本项目从研招网爬取专业信息,数据存储在 MySQL 数据库中。
使用专业代码-考试方式-院系所-学习方式-研究方向-考试科目组合(四门)
这几个作为唯一索引存储数据(可能会漏掉极少数仅仅跟别的专业在是否是退役计划处不同的专业)。
大致情况如图:
本项目爬取的完整数据已经发布,前往 release页面 下载即可。
使用本项目需要具备:下载项目、下载python依赖、创建数据库等非常基础的技能,在Ai协助下0基础大概率也能完成
-
克隆项目到本地
git clone https://github.com/freecho/yzw.git
-
安装依赖(建议使用pycharm自带的虚拟环境,python版本建议:3.12)
pip install -r requirements.txt
在MySQL中导入数据库文件(yzw.sql)
-
修改配置文件
config.yaml
中的数据库连接信息(下面作说明,下面括号内为说明,实际文件内不要携带)database: host: localhost(MySQL的host地址) port: 3306(MySQL端口) username: root(MySQL账号) password: 123456(MySQL密码) name: yzw(数据库名) interval: seconds: 1(爬取平均间隔,单位:秒,强烈建议大于等于1) # 代理池配置(可选) proxy: pool_url: "http://127.0.0.1:5010"(代理池API地址) enabled: true(是否启用代理功能) test_url: "https://www.baidu.com"(代理测试URL) test_timeout: 10(代理测试超时时间,单位:秒) backup_proxies:(备用代理列表) - "127.0.0.1:7890" - "127.0.0.1:1080" - "127.0.0.1:8080"
-
运行(运行main.py即可)
python main.py
按照提示输入账号密码或cookie登录。 常规情况使用账号密码登录即可!
程序启动后会提示选择网络连接方式:
- 使用代理池:推荐选择,可有效避免IP被封
- 使用自身IP:如果代理池不可用或不想使用代理
获取cookie:打开浏览器,登录研招网,按F12打开开发者工具,切换到"网络"(network)选项卡,刷新页面,找到请求头中的
Cookie
字段,将其复制到输入框中。
项目集成了代理池功能,可以有效解决IP被封的问题:
- 优先使用代理:程序启动时会尝试从代理池获取可用代理
- 自动切换:当代理失效时,自动切换到下一个可用代理
- 降级处理:当所有代理都失败时,自动降级使用自身IP
- 错误处理:当自身IP也失败时,记录错误并结束程序
- 启用代理池:在
config.yaml
中设置proxy.enabled: true
- 配置代理池地址:设置
proxy.pool_url
为你的代理池API地址 - 测试代理功能:运行
python test_proxy.py
测试代理功能
推荐使用 ProxyPool 项目作为代理池:
# 启动代理池调度程序
python proxyPool.py schedule
# 启动代理池API服务
python proxyPool.py server
程序支持两种断点模式:
- 自动断点模式:从数据库获取最后一条记录作为断点,自动从上次停止的地方继续爬取
- 手动断点模式:手动输入省份名称、学校名称(可选)、专业代码(可选),从指定位置开始爬取
本项目提供了一个独立的导出工具 export_major_csv.py
,用于将数据库中的 major 表数据导出为 Excel 可直接查看的 csv 文件。
- 支持自定义导出文件名(在脚本开头修改
EXPORT_FILENAME
变量即可) - 自动导出所有字段,字段顺序与数据库一致
- 按省份、学校名称排序,方便查阅
- 分批导出(每批1000行),即使数据量很大(如14万行)也不会内存爆炸
- 生成的 csv 文件可直接用 Excel 打开,无乱码
-
确保已完成数据库配置,并已安装依赖。
-
在命令行运行:
python export_major_csv.py
-
导出完成后,会在项目根目录生成你指定的 csv 文件(如
majors.csv
)。 -
可用 Excel 或 WPS 等表格工具直接打开查看。
如需自定义导出文件名,请直接修改 export_major_csv.py
文件开头的 EXPORT_FILENAME
变量。
经测试速度非常快,不到一分钟就可以导出约14w行数据。
总结:随时可以停止,下次运行会找到地方继续爬取,日志如果出现错误,基本就是需要切换IP/账号
本项目按照地区对应学校,遍历学校的所有专业来爬取,重复运行会先从数据库获取到最后抓到的数据,然后快速定位,从相应位置继续爬取,遇到重复的会忽略。
程序启动后会先处理日志中的失败请求,然后开始正常的爬取流程。
如果控制台日志出现:"重试次数过多,放弃当前专业详情抓取",请自行检查网络连接或调整爬取间隔。如果出现"请登录"代表没有登录成功,可能是账号密码错误或账号被限流。
遇到限流,请等待一段时间后再尝试运行,或者切换账号,或者尝试通过cookie登录。(通常需要更换账号+IP)
登录的时候密码错误也可能会提示登录成功,但实际不一定成功,会有影响,请自行确认密码正确性
本项目虽然使用多线程技术爬取,但是由于官方对流量限制较强,所以很多地方自断一臂,以适配最佳速度
项目整体逻辑较为简单,单台电脑即可部署
其他问题,请提Issue或邮件联系freccho@qq.com
,邮件时请附带Star⭐️本项目的截图