首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只下载一张图片

问只下载一张图片
EN

Stack Overflow用户
提问于 2021-03-21 14:33:45
回答 1查看 61关注 0票数 0

我试图使用ImagesPipeline下载图像,结果只能得到一张图片(最后一张);参见屏幕截图:

​

​

我的目标网站是https://sc.chinaz.com/tupian/

你可以检查我的代码:

代码语言:javascript
复制
#This is spider:

import scrapy
from imgPro.items import ImgproItem
from PIL import Image


class ImgSpider(scrapy.Spider):
    name = 'img'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['https://sc.chinaz.com/tupian/']


    def parse(self, response):
        div_list = response.xpath('//*[@id="container"]/div')
        # print(div_list)
        # url = 'https://sc.chinaz.com'

        for div in div_list:
            
            img_src = 'https:' + div.xpath('./div/a/img/@src2')[0].extract()
            print(img_src)

        item = ImgproItem()
        item['src'] = img_src

        
        yield item

这是我的管道:

代码语言:javascript
复制
import scrapy

from scrapy.pipelines.images import ImagesPipeline

class imagePipeLine(ImagesPipeline):

    def get_media_requests(self, item, info):
       yield scrapy.Request(item['src'])

    def file_path(self, request, response=None, info=None, *, item=None):
        imag_name = request.url.split('/')[-1]
        return imag_name

    def item_completed(self, results, item, info):
        return item

我该怎么做才能得到所有的图像?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-21 15:37:55

在for-循环中的parse()中,您要遍历所有图像的列表,但是在循环之后,只有最后一个图像保存在img_src中,并且永远不会返回到以前的图像。因此,您要么需要在得到每个图像的img_src后立即处理它:

代码语言:javascript
复制
for div in div_list:        
    img_src = 'https:' + div.xpath('./div/a/img/@src2')[0].extract()
    print(img_src)
    # now process this image

或者将它们全部保存在一个列表中,然后处理整个列表:

代码语言:javascript
复制
all_img_srcs = []
for div in div_list:
    img_src = 'https:' + div.xpath('./div/a/img/@src2')[0].extract()
    print(img_src)
    all_img_srcs.append(img_src)

# now process all the images on the list

或者也许

代码语言:javascript
复制
def parse(self, response):
    div_list = response.xpath('//*[@id="container"]/div')

    items = []
    for div in div_list:            
        img_src = 'https:' + div.xpath('./div/a/img/@src2')[0].extract()
        print(img_src)
        item = ImgproItem()
        item['src'] = img_src
        items.append(item)   

    yield items
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66733590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档