Spaces:
Runtime error
Runtime error
CSV批量导入功能
📋 功能说明
添加了CSV批量导入功能,可以将类似Wiki网站的数据直接从CSV文件批量导入到数据库中,避免重复爬取,极大提高数据导入效率。
✅ 已实现的功能
1. CSV解析和导入
- ✅ 支持多种CSV格式(UTF-8、Latin-1编码)
- ✅ 自动识别CSV列(title, content, url, category等)
- ✅ 智能字段匹配(不区分大小写)
- ✅ 自动生成URL(如果CSV中没有URL列)
2. 批量处理
- ✅ 批量向量化和存储(默认每批50条)
- ✅ 自动独特性检测和晋升到Space R
- ✅ 进度反馈(实时显示导入进度)
3. 前端界面
- ✅ CSV文件选择器
- ✅ 密码验证(与URL爬取共用密码)
- ✅ URL前缀配置(可选)
- ✅ 上传状态反馈
4. 后端处理
- ✅ 异步后台处理(不阻塞请求)
- ✅ WebSocket实时进度推送
- ✅ 错误处理和日志记录
- ✅ 自动清理临时文件
🎯 使用方法
步骤 1: 准备CSV文件
CSV文件应包含以下列(列名不区分大小写):
必需列:
content/text/body- 内容文本
可选列:
title/name/page- 标题url/link- URL链接category/type- 分类
CSV示例:
title,content,url,category
"Machine Learning","Machine learning is a subset of artificial intelligence...","https://wiki.example.com/ml","Technology"
"Deep Learning","Deep learning uses neural networks...","https://wiki.example.com/deep-learning","Technology"
"Python Programming","Python is a high-level programming language...","https://wiki.example.com/python","Programming"
或者更简单的格式:
title,content
"Article 1","This is the content of article 1..."
"Article 2","This is the content of article 2..."
如果没有URL列,系统会自动生成URL(基于URL前缀和标题)。
步骤 2: 上传CSV文件
- 在前端页面找到"Batch Import (Wiki Style)"区域
- 点击"选择文件"按钮,选择CSV文件
- 可选:输入URL前缀(例如:
https://wiki.example.com/page) - 输入密码(与URL爬取相同的密码)
- 点击"批量导入"按钮
步骤 3: 查看导入进度
导入过程中,您会看到:
- 实时进度提示(通过WebSocket推送)
- 成功/失败统计
- 自动晋升到Space R的内容数量
📊 CSV格式说明
支持的列名(不区分大小写)
内容列(优先级从高到低):
contenttextbodydescriptionabstract
如果以上列都不存在,系统会尝试组合所有非URL/标题列作为内容。
标题列(优先级从高到低):
titlenamepage
URL列(优先级从高到低):
urllinkhref
如果CSV中没有URL列,系统会根据以下规则生成:
- 如果提供了URL前缀:
{url_prefix}/{title_with_underscores} - 如果没有URL前缀:
csv_import/{title_with_underscores}或csv_import/{random_id}
分类列:
categorytype
数据要求
- 内容文本长度至少10个字符(太短的会被跳过)
- 支持多行文本(CSV格式中的换行符会被保留)
- 自动清理空值和多余空格
🔧 配置说明
环境变量
CSV导入功能使用与URL爬取相同的密码验证:
CRAWL_PASSWORD- 在.env文件中设置
导入参数
- 批量大小:默认50条/批(可在代码中调整)
- 独特性检测:默认开启,独特内容会自动晋升到Space R
- URL前缀:可选,用于生成缺失的URL
📝 导入统计
导入完成后,系统会返回统计信息:
{
"total": 100, // 总行数
"processed": 100, // 已处理行数
"success": 95, // 成功导入数
"failed": 5, // 失败数
"promoted": 10 // 晋升到Space R的数量
}
🔍 错误处理
常见错误
密码错误
- 错误信息:
密码错误,CSV导入被拒绝 - 解决:检查密码是否正确
- 错误信息:
文件格式错误
- 错误信息:
只支持CSV文件格式 - 解决:确保文件扩展名为
.csv
- 错误信息:
编码问题
- 系统会自动尝试多种编码(UTF-8、Latin-1)
- 如果仍有问题,请将CSV文件转换为UTF-8编码
内容太短
- 内容少于10个字符的行会被跳过
- 确保每行都有足够的内容
💡 使用建议
性能优化
批量大小
- 默认50条/批,适合大多数情况
- 对于大型CSV(>1000行),可以增加到100
URL前缀
- 建议为不同来源的Wiki设置不同的URL前缀
- 例如:
https://wiki.example.com/page、https://docs.example.com/article
分类标签
- 使用
category列可以帮助后续搜索和过滤 - 统一的分类命名有助于数据管理
- 使用
数据质量
内容清理
- 导入前建议清理HTML标签(如果CSV中包含)
- 确保内容是可读的纯文本
标题质量
- 良好的标题有助于生成有意义的URL
- 标题应该是简洁、描述性的
URL唯一性
- 如果CSV中有URL列,确保URL是唯一的
- 重复的URL可能导致数据覆盖
🔒 安全说明
- CSV导入需要密码验证(与URL爬取共用)
- 文件上传后存储在临时目录,处理完成后自动删除
- 建议在生产环境中使用HTTPS
📚 相关文件
csv_importer.py- CSV导入核心模块web_server.py- API端点和后台任务static/index.html- 前端上传界面system_manager.py- 数据库存储逻辑
🔄 更新日志
v1.0 (当前版本)
- ✅ 支持多种CSV格式和列名
- ✅ 批量导入和进度反馈
- ✅ 自动独特性检测和晋升
- ✅ 密码验证和安全控制
- ✅ 前端上传界面
🚀 后续改进
可能的改进方向:
- 支持Excel文件导入(.xlsx)
- 支持JSON格式导入
- 导入预览功能(上传前预览前几行)
- 导入历史记录
- 重复数据检测和去重
- 自定义字段映射配置