一个用于从批量采集国家自然基金项目数据的 Python 工具,支持自定义关键词搜索和年份范围筛选。
github网址:https://github.com/CaoYongshengcys/NSFC_scraper
功能特性
- 支持自定义关键词搜索
- 支持指定立项年份范围
- 自动分页爬取所有结果
- Cookie 持久化,避免重复登录
- 数据导出为 CSV 格式,支持 Excel 直接打开
- 可视化浏览器操作,方便调试和手动登录
环境要求
- Python 3.8+
- Chromium 浏览器(Playwright 会自动安装)
安装步骤
1. 安装依赖
bash
pip install playwright
2. 安装浏览器
bash
playwright install chromium
项目结构
.
├── scrape_fund.py # 主程序
├── cookies.json # Cookie 缓存文件(自动生成)
├── fund_关键词_年份.csv # 导出的数据文件(自动生成)
└── README.md # 本文档
使用方法
基本用法
bash
python scrape_fund.py --keyword "电动汽车"
完整参数
bash
python scrape_fund.py --keyword "关键词" --start-year 2022 --end-year 2026 --wait 60
参数说明
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--keyword |
-k |
电动汽车 | 搜索关键词 |
--start-year |
-s |
2022 | 起始年份 |
--end-year |
-e |
2026 | 结束年份 |
--wait |
-w |
30 | 登录等待时间(秒) |
使用示例
搜索"人工智能"相关项目,年份范围 2020-2024:
bash
python scrape_fund.py -k "人工智能" -s 2020 -e 2024
搜索"新能源"相关项目,增加登录等待时间:
bash
python scrape_fund.py --keyword "新能源" --wait 120
运行流程
- 程序启动后会自动打开 Chromium 浏览器
- 访问青塔自科云首页
- 等待用户登录(首次运行需要手动登录)
- 登录成功后,程序会自动保存 Cookie
- 根据关键词和年份范围执行搜索
- 自动翻页爬取所有结果
- 将数据保存为 CSV 文件
输出示例
终端输出
==================================================
青塔自科云基金项目爬虫
==================================================
关键词: 电动汽车
年份范围: 2022 - 2026
登录等待: 30秒
==================================================
正在访问首页...
已加载保存的cookies
请在浏览器中登录(如果需要),等待30秒...
已保存cookies
正在访问搜索页: https://xxxx/fund/list?keyword=电动汽车&searchtype=(立项年份=2022-2026)
等待搜索结果加载...
找到列表项!
结果信息: 项目数 256
总项目数: 256
找到 20 个列表项
正在解析第 1 页...
当前页找到 20 个项目
已收集 20 个项目
正在解析第 2 页...
当前页找到 20 个项目
已收集 40 个项目
...
总共收集到 256 个项目
数据已保存到 fund_电动汽车_2022-2026.csv
CSV 输出格式
| 题目 | 受资机构 | 负责人 | 资助机构 | 金额 | 立项年份 | 申报领域 |
|---|---|---|---|---|---|---|
| 电动汽车充电优化研究 | 清华大学 | 张三 | 国家自然科学基金委员会 | 50万元 | 2023 | 工程与材料科学 |
| ... | ... | ... | ... | ... | ... | ... |
注意事项
- 首次运行需要手动登录青塔账号
- 登录成功后 Cookie 会自动保存,后续运行可能无需重复登录
- 如果 Cookie 过期,请删除
cookies.json文件后重新运行 - 建议适当增加
--wait参数值,确保登录完成 - 爬取过程中请勿关闭浏览器窗口
- 请遵守网站使用条款,合理控制爬取频率
常见问题
Q: 提示"未找到数据"怎么办?
A: 请检查以下几点:
- 是否已成功登录账号
- 关键词是否正确
- 年份范围内是否有相关项目
- 尝试增加
--wait参数值
Q: Cookie 失效怎么办?
A: 删除项目目录下的 cookies.json 文件,重新运行程序并手动登录。
bash
rm cookies.json
python scrape_fund.py --keyword "关键词" --wait 60
Q: 如何修改爬取速度?
A: 可以在源码中修改 time.sleep() 的参数值。建议不要设置过快,以免触发反爬机制。
Q: CSV 文件用 Excel 打开乱码?
A: 程序已使用 utf-8-sig 编码,支持 Excel 直接打开。如仍有问题,可尝试用记事本打开后另存为 ANSI 编码。
数据字段说明
| 字段 | 说明 |
|---|---|
| 题目 | 项目名称 |
| 受资机构 | 承担项目的机构 |
| 负责人 | 项目负责人姓名 |
| 资助机构 | 提供资助的机构(如国家自然科学基金委员会) |
| 金额 | 资助金额(万元) |
| 立项年份 | 项目立项的年份 |
| 申报领域 | 项目所属的学科领域 |
免责声明
本工具仅供学习和研究使用。