百度学术Python爬虫深度实战:从逆向工程到多维度学术指标抓取

一、项目背景与技术选型

1.1 为什么选择百度学术

百度学术收录了超过6亿篇学术文献,涵盖中外文期刊、会议、专利。其独特的“学术影响力”指标包括:

  • 总引用量:论文被引次数

  • H指数:作者至少有h篇论文被引用了至少h次

  • G指数:弥补H指数对高被引论文不敏感的缺陷

  • 年份分布:论文发表时间及逐年引用趋势

1.2 技术挑战

百度学术在2025年底进行了大幅反爬升级:

  1. 动态Token:每个请求携带x-bce-signature签名

  2. Webpack异步加载:数据通过/search接口返回加密JSON

  3. IP频率限制:单IP每分钟超过30次请求触发验证码

  4. User-Agent校验:必须携带最新Chrome/Edge的UA

1.3 环境与库

  • Python 3.11+

  • requests2.32.3:HTTP请求

  • execjs1.5.2:执行JavaScript解密

  • pandas2.2.5:数据清洗

  • fake_useragent2.0.3:随机UA

  • retry装饰器:自动重试

  • sqlite3:本地存储


目录

一、项目背景与技术选型

1.1 为什么选择百度学术

1.2 技术挑战

1.3 环境与库

二、逆向工程:破解百度学术的请求签名机制

2.1 抓包分析

2.2 获取动态Token

三、完整代码架构设计

3.1 目录结构

3.2 配置模块(config.py)

四、签名生成器(sign_utils.py)

五、核心爬虫(spider.py)

5.1 Session管理

5.2 反爬策略增强

六、数据解析(parser.py)

6.1 提取JSON数据

6.2 处理动态加载的引用详情

七、数据存储(storage.py)

八、中间件与代理(middleware.py)

九、完整主程序(main.py)

十、高级功能:获取H指数曲线与引用趋势

10.1 作者页面解析

10.2 批量获取论文引用年份分布

十一、异常处理与日志监控

11.1 日志配置

11.2 重试装饰器

十二、性能优化:异步+多线程

十三、结果数据分析示例


二、逆向工程:破解百度学术的请求签名机制

2.1 抓包分析

打开浏览器开发者工具(F12),访问https://xueshu.baidu.com/s?wd=深度学习,观察网络请求:

  1. 关键请求/s?wd=深度学习&rsv_bp=0&tn=SE_baiduxueshu_c1g...

  2. 响应格式:HTML中包含一个<script>标签,内部有window.__INITIAL_STATE__

  3. 加密特征sign参数由tokentimestamp通过HM