4

我正在从这个站点下载图像。但问题是产品有三张图片,一张用于本网站,另一张用于产品特定页面。我可以从该站点下载图像,但我也想下载其余图像,但它们的 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()

因此,当我从目录页面下载图像时,我也想下载这些图像..就像上面我在解析方法中所做的那样……有没有办法做到这一点……很容易……一种方法是阅读产品 URL 形成 JSON 文件......然后提取它们......是他们的任何其他方式......

4

1 回答 1

2

不要return item来自parse方法,而是yield一个requestforprodcuturl然后yield/return itemproduct_detail_page

 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
于 2013-06-07T10:15:44.807 回答