Python 使用scrapy下载图像的正确方法

Python 使用scrapy下载图像的正确方法,python,scrapy,Python,Scrapy,我正在从这个网站下载图片。但问题是该产品有三个图像,一个用于此网站,另一个用于特定于产品的页面。我可以从这个网站下载图片,但我也想下载其余的图片,但它们的URL在特定于产品的页面上给出。我一次下载所有图片的方式是否意味着我想一次性收集与产品相关的数据 喜欢在parse方法中请求读取产品页面,同时提取图像URL。下面是我的代码解析方法 class ESpider(BaseSpider): name = "eSpider" allowed_domains = ["1click1cal

我正在从这个网站下载图片。但问题是该产品有三个图像,一个用于此网站,另一个用于特定于产品的页面。我可以从这个网站下载图片,但我也想下载其余的图片,但它们的URL在特定于产品的页面上给出。我一次下载所有图片的方式是否意味着我想一次性收集与产品相关的数据

喜欢在parse方法中请求读取产品页面,同时提取图像URL。下面是我的代码解析方法

class ESpider(BaseSpider):
    name = "eSpider"
    allowed_domains = ["1click1call.com"]
    start_urls = "http://1click1call.com/Jeans-Shirts-Tshirts-Trousers"

    def parse(self, response):                      
        hxs = HtmlXPathSelector(response)        
        sites = hxs.select('//div[@class="bord"]')
        items = []
        for site in sites:
            item = EscraperItem()
            item['productSite'] = "http://1click1call.com/"
            item['productPrice'] = site.select('div[@class="price"]').extract()            
            item['productURL'] = site.select('div[@class="image"]/a/@href').extract()
            item['productTitle'] = site.select('div[@class="name"]/a/text()').extract()
            item['productImage'] = site.select('div[@class="image"]/a/img/@src').extract()
            item['productDesc'] = site.select('div[@class="description"]/text()').extract()
            item['image_urls'] = item['productImage']
            items.append(item)

        return items
比如这个产品 他们有四张图片,我想在抓取这张图片的同时提取所有这些图片

要提取我正在使用的特定产品图像,请使用以下内容:

hxs.select('//div[@class="left"]//div[@class="image"]/a/@href').extract()
hxs.select('//div[@class="left"]//div[@class="image"]/a/img/@src').extract()
hxs.select('//div[@class="left"]//div[@class="image-additional"]/a/img/@src').extract()
hxs.select('//div[@class="left"]//div[@class="image-additional"]/a/@href').extract()

因此,当我从目录页下载图像时,我也想下载这些图像。就像上面我在用解析方法做的那样…有没有任何方法可以做到这一点…很简单…一种方法是从JSON文件中读取产品URL…然后提取它们…是它们的任何其他方法…

不要
从中返回
parse
方法,但
yield
a
request
for
prodcuturl
,然后
yield/return
产品详细信息页面

 def parse(self, response):                      
        hxs = HtmlXPathSelector(response)        
        sites = hxs.select('//div[@class="bord"]')
        items = []
        for site in sites:
            item = EscraperItem()
            item['productSite'] = "http://1click1call.com/"
            item['productPrice'] = site.select('div[@class="price"]').extract()            
            item['productURL'] = site.select('div[@class="image"]/a/@href').extract()
            item['productTitle'] = site.select('div[@class="name"]/a/text()').extract()
            item['productImage'] = site.select('div[@class="image"]/a/img/@src').extract()
            item['productDesc'] = site.select('div[@class="description"]/text()').extract()
            item['image_urls'] = item['productImage']
            yield Request(item['productURL'][0],
                          meta={'item':item},
                          callback=self.product_detail_page)


def product_detail_page(self,response):
    hxs=HtmlXpathSelector(response)
    item=response.request.meta['item']
    # add all images url's in item['image_urls']
    yield item