Skip to content
Open
Changes from 1 commit
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
3183445
告警成功率阈值从硬编码50%移入配置文件,以支持自定义;相关日志调整
Apr 7, 2026
e8426e7
提高redis依赖兼容性:最大版本支持从<4.0提升到<6.0
Apr 7, 2026
f471fbf
提高redis依赖兼容性:最大版本支持从<4.0提升到<6.0
Apr 7, 2026
b1c5afa
文件下载爬虫第一次提交
Apr 7, 2026
5c0e78a
文件下载爬虫第二次提交,修复bug
Apr 7, 2026
edaeee4
文件下载爬虫第三次提交,修复细节bug
Apr 7, 2026
744f172
文件下载爬虫第四次提交,文档细节调整
Apr 7, 2026
0bfd88d
文件下载爬虫支持任务字段透传组装最终item;on_task_all_done方法签名修改。
Apr 8, 2026
e25915c
解决“文件下载爬虫支持任务字段透传组装最终item”的bug——第一次提交
Apr 8, 2026
5f4ddb4
解决“文件下载爬虫支持任务字段透传组装最终item”的bug——第一次提交
Apr 8, 2026
7162763
解决“文件下载爬虫支持任务字段透传组装最终item”的bug——第二次提交——修复竞态条件bug,新增skipped_count字段。
Apr 8, 2026
6c04fc0
解决“文件下载爬虫支持任务字段透传组装最终item”的bug——第四次提交——添加run_id标识,避免小概率情况下跨批次请求造成统计错误。
Apr 8, 2026
517042a
第五次提交:修复方法签名不一致问题,文档更新。
Apr 8, 2026
b1db0c9
第六次提交:修复方法签名不一致问题;选择mysql作为缓存时,按 redis_key分表,减少跨业务串扰。
Apr 8, 2026
b7a0835
Merge pull request #4 from gyj126/file-spider
gyj126 Apr 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
文件下载爬虫第四次提交,文档细节调整
  • Loading branch information
gaoyunjian committed Apr 7, 2026
commit 744f17247f2b8c1f1069550bfe50b98dde97ff17
14 changes: 7 additions & 7 deletions docs/usage/FileSpider.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ FileSpider 是一款分布式文件下载爬虫,专用于批量下载文件/
- **进度追踪**: 框架自动追踪每个任务的下载进度(成功数/失败数/总数)
- **结果有序**: 下载结果列表与原始 URL 列表严格位置对应
- **灵活存储**: 默认保存到本地磁盘,可重写为上传云存储(OSS/S3 等),不落盘
- **文件去重**: 可选功能,同一 URL 不重复下载,支持 Redis / MySQL 两种策略
- **文件去重**: 可选功能,同一 URL 不重复下载,支持 Redis / MySQL / 自定义 三种策略
- **用户控制**: 任务成功/失败由用户在回调中显式决定

FileSpider 继承自 TaskSpider,复用了全部任务管理能力(MySQL 任务表、Redis 队列、断点续爬、丢失任务回收、分布式支持等)。
Expand Down Expand Up @@ -127,7 +127,7 @@ if __name__ == "__main__":
spider.start_monitor_task()
```

### 场景二:上传云存储(不落盘)
### 场景二:上传云存储

重写 `process_file` 实现直接上传云存储:

Expand All @@ -142,7 +142,7 @@ class OssFileSpider(feapder.FileSpider):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 初始化云存储客户端
# self.oss_client = OSSClient(bucket="my-bucket")
self.oss_client = OSSClient(bucket="my-bucket")

def get_download_urls(self, task):
return json.loads(task.file_urls)
Expand All @@ -154,7 +154,7 @@ class OssFileSpider(feapder.FileSpider):

def process_file(self, task_id, url, file_path, response):
"""上传 OSS,返回云存储 URL"""
# self.oss_client.put_object(file_path, response.content)
self.oss_client.put_object(file_path, response.content)
return f"https://my-bucket.oss.aliyuncs.com/{file_path}"

def on_task_all_done(self, task_id, success_count, fail_count, total_count, results):
Expand Down Expand Up @@ -194,7 +194,7 @@ from items.file_result_item import FileResultItem
class OssResultSpider(feapder.FileSpider):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# self.oss_client = OSSClient(bucket="my-bucket")
self.oss_client = OSSClient(bucket="my-bucket")

def get_download_urls(self, task):
return json.loads(task.file_urls)
Expand All @@ -204,11 +204,11 @@ class OssResultSpider(feapder.FileSpider):
return f"images/{task.id}/{index}_{filename}"

def process_file(self, task_id, url, file_path, response):
# self.oss_client.put_object(file_path, response.content)
self.oss_client.put_object(file_path, response.content)
return f"https://my-bucket.oss.aliyuncs.com/{file_path}"

def on_task_all_done(self, task_id, success_count, fail_count, total_count, results):
# results 与 get_download_urls 返回的列表严格位置对应
# results 与 get_download_urls 返回的列表严格位置对应,下载失败的用null占位。如需去空,手动lamda表达式过滤即可。
item = FileResultItem()
item.task_id = task_id
item.result_urls = json.dumps(results)
Expand Down