如何使用scrapy下载图像并上传到S3服务器

3 投票
1 回答
668 浏览
提问于 2025-04-20 19:02

我想在爬虫关闭的时候把图片上传到S3存储。
我现在的方法是把所有的图片从MongoDB中发送:upload_s3(ShA.objects.all())
但我想改成只发送这次爬虫下载的图片。

我需要把变量sh.images从函数process_item()传递到函数close_spider(),这样MongoDB就能过滤出这次爬虫抓取的项目。

我该怎么修改才能实现这个呢?

这是我的管道代码:

from mongo.models import ShA
from uploads3 import upload_s3 
class ShPipeline(object):
    def process_item(self, item, spider):
        if isinstance(item, ShaItem):  
            sh = item.save(commit=False)  
            sh_exist = ShA.objects.filter(link=sh.link)  
            if sh_exist:
                sh.id = sh_exist[0].id
            sh.save()
            #sh.images
            return item

    def close_spider(self, spider,item):
        if spider.name == "email":
            upload_s3(ShA.objects.all()) 
            #upload_s3(ShA.objects.get(images=sh.images)) no use,need to get sh.images from def process_item

1 个回答

1

你可以直接使用 self,不过我真的建议你使用我们的管道

撰写回答