scrapy框架下载图片失败原因(记自己踩的坑)

本文详细解析使用Scrapy框架下载360图片时遇到的常见问题。重点介绍因路径设置不当导致下载失败的情况,强调了文件名使用int类型时需转换为字符串的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近练习scrapy框架,爬取360图片,已经爬取到了想要的信息,然而在下载时下载错误。想看结果的直接看最后结论!

如下是下载函数

'''
下载图片
'''
class ImagePipeline(ImagesPipeline):

    def get_media_requests(self,item,info):
        yield Request(url=item['url'],meta={'item':item})
    
    def file_path(self, request, response=None, info=None):
        #url = request.url
        #file_name = url.split('/')[-1]
        # return file_name
      
        file_name = request.meta['item']['title']
        image_name = request.meta['item']['index'] + '.jpg'
        return "{0}/{1}".format(file_name,image_name)
    
    def item_completed(self,results,item,info):
            image_paths = [x['path'] for ok,x in results if ok]
            if not image_paths:
                raise DropItem('Image Downloaded Failed')
            return item
    

item里的值为

 def detail_parse(self,response):
        results = json.loads(response.text)
        index = 0
        for result in results.get('result'):
            index += 1
            item = ImageItem()
            item['url'] = result.get('qhimg_url')
            item['thumb'] = result.get('qhimg_thumb')
            item['title'] = response.meta.get('title')
            item['index'] = index
            yield item

运行后如图,item内信息已经爬到,url也是正确的直接在浏览器里可以搜出图片,但是抛出异常下载失败,又没有错误提示。在这里插入图片描述
一开始我以为是传的url的问题,经过我反复尝试返现是储存路径出了问题。我的目的是以title作为二级目录的文件夹名,然后以1,2,3序号命名图片。可以看到我的index定义的是int类型的,直接用int类型的不能当做下载文件名,所以用str(index)转成字符串就可以了,结果如图。所以在下载失败的时候分析一下看看自己的路径有没有问题。不能单独用int命名这个点我反复debug了3个多小时才发现。FXXK,又没有错误提示,太坑了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论:单独用int类型命名图片是不行如的如 1.jpg,必须转换成字符串格式。下载失败的原因可能是:1、url不正确。2、储存路径不正确

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值