一个用于搜索、保存和AI智能分析 arXiv 论文的 Python Web 应用程序。集成 DeepSeek API 实现论文摘要分析、全文深度分析和多轮问答功能。
- 🔍 智能搜索: 按关键词、作者或分类搜索论文
- 💾 本地保存: 将论文摘要以 JSON 格式存储到本地
- 📥 PDF下载: 下载论文 PDF 并自动提取文本内容
- 🌐 Web界面: 美观、响应式的 Web 用户界面
- 📝 摘要分析: 使用 DeepSeek 对论文摘要进行深度分析
- 📚 全文分析: 对论文全文进行详细分析,生成 HTML 报告
- 💬 智能问答: 基于论文内容进行多轮对话,支持上下文记忆
- 🧠 推理过程: 展示 AI 的思考和推理过程(Reasoning)
- 📊 流式输出: 实时显示 AI 生成内容
- 📊 RESTful API: 完整的 API 接口,支持程序化集成
- ⚡ 异步架构: 基于 async Python 构建,高效处理请求
- 📱 响应式设计: 支持各种设备访问
- 🔒 HTTP认证: 可选的 HTTP Basic Auth 保护
- Python 3.12 或更高版本
- pip (Python 包管理器)
- DeepSeek API Key(用于 AI 分析功能)
- 克隆/进入项目目录
cd /path/to/python_web_crawler- 创建虚拟环境(推荐)
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate- 安装依赖
pip install -r requirements.txt- 配置环境变量
创建 .env 文件(或设置环境变量):
# 复制示例配置
cp .env.example .env
# 编辑配置文件
vim .env.env 文件示例:
# DeepSeek API 配置(必需,用于AI分析功能)
DEEPSEEK_API_KEY=sk-your-deepseek-api-key-here
# 可选配置
APP_HOST=0.0.0.0
APP_PORT=8000
DEBUG=True
# 认证配置(可选)
AUTH_ENABLED=True
AUTH_USERNAME=admin
AUTH_PASSWORD=your_secure_password- 运行应用
python run.py- 访问应用
打开浏览器访问 http://localhost:8000
- 访问 DeepSeek 开放平台
- 注册并登录账号
- 在控制台创建 API Key
- 将 API Key 配置到环境变量
DEEPSEEK_API_KEY
| 变量 | 默认值 | 说明 |
|---|---|---|
DEEPSEEK_API_KEY |
"" |
必需 - DeepSeek API 密钥 |
DEEPSEEK_API_BASE_URL |
https://api.deepseek.com |
API 基础 URL |
DEEPSEEK_MODEL |
deepseek-reasoner |
使用的模型(支持推理过程展示) |
DEEPSEEK_MAX_TOKENS |
65536 |
最大 token 数量 |
deepseek-reasoner(推荐): 支持展示推理过程,适合学术分析deepseek-chat: 标准对话模型
本应用使用 OpenAI SDK 兼容的方式调用 DeepSeek API:
from openai import OpenAI
client = OpenAI(
api_key="your-deepseek-api-key",
base_url="https://api.deepseek.com"
)
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=[
{"role": "system", "content": "你是一位学术论文分析专家"},
{"role": "user", "content": "分析这篇论文..."}
],
stream=True
)在论文详情页,输入分析提示词(如"总结主要贡献"、"分析方法论"),点击"Analyze Abstract"即可获得 AI 分析报告。
- 首先点击 "Download PDF & Extract Text" 下载并提取论文文本
- 在"Fulltext Analysis"部分输入分析提示词
- 点击 "Analyze Fulltext" 进行全文深度分析
- 确保已下载并提取论文文本
- 在 "Q&A with DeepSeek" 部分输入问题
- 支持多轮对话,AI 会记住上下文
- 问答历史会自动保存
python_web_crawler/
├── app/ # Web 应用模块
│ ├── __init__.py
│ ├── main.py # FastAPI 应用入口
│ ├── auth.py # HTTP Basic Auth
│ ├── routes/ # API 路由
│ │ ├── search.py # 搜索端点
│ │ ├── papers.py # 论文管理端点
│ │ └── analysis.py # AI 分析端点
│ ├── templates/ # Jinja2 HTML 模板
│ │ ├── base.html
│ │ ├── index.html
│ │ ├── results.html
│ │ ├── papers.html
│ │ └── paper_detail.html
│ └── static/ # 静态资源
│ ├── css/style.css
│ ├── js/app.js
│ └── vendor/ # 本地化的第三方库
│ ├── katex/ # 数学公式渲染
│ ├── marked/ # Markdown 渲染
│ └── highlight/ # 代码高亮
│
├── crawler/ # 爬虫和 AI 模块
│ ├── __init__.py
│ ├── models.py # 数据模型
│ ├── arxiv_client.py # arXiv API 客户端
│ └── deepseek_client.py # DeepSeek API 客户端
│
├── storage/ # 存储模块
│ ├── __init__.py
│ └── file_handler.py # 文件操作
│
├── config/ # 配置模块
│ ├── __init__.py
│ └── settings.py # 应用配置
│
├── data/ # 数据存储目录
│ ├── papers/ # 论文 JSON 数据
│ ├── pdfs/ # 下载的 PDF 文件
│ ├── texts/ # 提取的文本内容
│ ├── analysis/ # AI 分析报告(HTML)
│ └── qa/ # 问答历史记录
│
├── requirements.txt # Python 依赖
├── run.py # 应用启动入口
└── README.md # 项目说明
所有配置可通过环境变量或 .env 文件设置:
| 变量 | 默认值 | 说明 |
|---|---|---|
APP_HOST |
0.0.0.0 |
服务器主机 |
APP_PORT |
8000 |
服务器端口 |
DEBUG |
True |
调试模式 |
| 变量 | 默认值 | 说明 |
|---|---|---|
AUTH_ENABLED |
True |
是否启用 HTTP Basic Auth |
AUTH_USERNAME |
admin |
认证用户名 |
AUTH_PASSWORD |
change_me_to_secure_password |
认证密码(请修改!) |
| 变量 | 默认值 | 说明 |
|---|---|---|
ARXIV_MAX_RESULTS |
10 |
默认搜索结果数量 |
ARXIV_RATE_LIMIT_DELAY |
3.0 |
API 请求间隔(秒) |
| 变量 | 默认值 | 说明 |
|---|---|---|
DEEPSEEK_API_KEY |
"" |
必需 - API 密钥 |
DEEPSEEK_API_BASE_URL |
https://api.deepseek.com |
API 基础 URL |
DEEPSEEK_MODEL |
deepseek-reasoner |
使用的模型 |
DEEPSEEK_MAX_TOKENS |
65536 |
最大 token 数 |
服务器运行后,访问:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
| 方法 | 端点 | 说明 |
|---|---|---|
GET |
/ |
首页 |
POST |
/search |
搜索论文(表单) |
GET |
/search?q=... |
搜索论文(URL参数) |
GET |
/api/search |
搜索 API(JSON) |
GET |
/api/search/author |
按作者搜索 |
GET |
/api/search/category |
按分类搜索 |
| 方法 | 端点 | 说明 |
|---|---|---|
GET |
/papers |
已保存论文列表 |
GET |
/papers/{id} |
论文详情页 |
POST |
/papers/api/save/{id} |
保存论文 |
DELETE |
/papers/api/{id} |
删除论文 |
POST |
/papers/api/download-pdf/{id} |
下载 PDF 并提取文本 |
| 方法 | 端点 | 说明 |
|---|---|---|
GET |
/analysis/status |
检查 DeepSeek API 状态 |
POST |
/analysis/analyze/stream |
流式摘要分析 |
POST |
/analysis/analyze/fulltext/stream |
流式全文分析 |
POST |
/analysis/qa/ask/stream |
流式问答 |
GET |
/analysis/qa/history/{title} |
获取问答历史 |
DELETE |
/analysis/qa/delete/{title} |
删除问答历史 |
# 搜索论文
curl "http://localhost:8000/api/search?query=machine+learning&max_results=5"
# 按作者搜索
curl "http://localhost:8000/api/search/author?author=Hinton"
# 按分类搜索
curl "http://localhost:8000/api/search/category?category=cs.AI"
# 保存论文
curl -X POST "http://localhost:8000/papers/api/save/2312.12345"
# 下载 PDF 并提取文本
curl -X POST "http://localhost:8000/papers/api/download-pdf/2312.12345"
# 检查 DeepSeek API 状态
curl "http://localhost:8000/analysis/status"
# 流式分析摘要
curl -X POST "http://localhost:8000/analysis/analyze/stream" \
-H "Content-Type: application/json" \
-d '{"paper_id": "2312.12345", "title": "Paper Title", "abstract": "...", "prompt": "总结主要贡献"}'# 启用自动重载
DEBUG=True python run.pypytest tests/- 本应用使用 arXiv API 获取论文数据
- 请遵守 arXiv 的速率限制(默认:请求间隔 3 秒)
- arXiv 是预印本仓库,论文未经同行评审
- AI 分析功能需要有效的 DeepSeek API Key
- 所有数据(论文、PDF、分析报告、问答历史)均存储在
data/目录
Q: 提示 "DeepSeek API is not configured"
A: 请确保已设置环境变量 DEEPSEEK_API_KEY,可以通过 .env 文件或直接导出:
export DEEPSEEK_API_KEY=sk-your-api-keyQ: AI 分析超时或失败 A: DeepSeek reasoner 模型处理复杂分析可能需要较长时间,请耐心等待。如果频繁失败,检查网络连接或 API 配额。
Q: 数学公式显示不正确
A: 应用使用 KaTeX 渲染数学公式,支持 $...$、$$...$$、\(...\)、\[...\] 格式。
Q: PDF 文本提取失败
A: 确保已安装 PyMuPDF(pip install pymupdf),部分扫描版 PDF 可能无法提取文本。
- arXiv.org - 开放获取的研究论文平台
- DeepSeek - 强大的 AI 模型提供商
- FastAPI - 优秀的 Web 框架
- KaTeX - 快速的数学公式渲染库
- marked - Markdown 解析器
- highlight.js - 代码语法高亮
本项目采用 MIT License 开源协议。
Made with ❤️ for researchers and developers