Scrapy无法获取图片网址,也无法下载图片

时间:2016-10-11 06:39:48

标签: python image scrapy pipeline

我已经尝试了谷歌和堆栈溢出解决方案中的每个搜索结果,但我无法得到解决方案。 我正在创建一个scrapy来提取图像,请找到下面的代码

我的items.py

class MyntraItem(scrapy.Item):
    product_urls=scrapy.Field()
    files=scrapy.Field()
    image_urls=scrapy.Field()
    images = scrapy.Field()

我的settings.py

BOT_NAME = 'hello'

SPIDER_MODULES = ['myntra.spiders']
NEWSPIDER_MODULE = 'myntra.spiders'

FILES_STORE = '/home/swapnil/Desktop/AI/myntra/'
ITEM_PIPELINES = {
   #'myntra.pipelines.SomePipeline': 300,   
   'scrapy.pipelines.images.FilesPipeline': 1,
}

我的first.py

class FirstSpider(CrawlSpider):
    name = "first"
    allowed_domains = ["myntra.com"]
    start_urls = [
        'http://www.myntra.com/men-sports-tshirts-menu?src=tNav&f=Pattern_article_attr%3Astriped',
    ]
    rules = [Rule(LinkExtractor(restrict_xpaths=['//*[@class="product-link"]']),callback='parse_lnk',follow=True)]
    #rules = [Rule(LinkExtractor(allow=['.*']),callback='parse_lnk',follow=True)]

    def parse_lnk(self, response):
        item=MyntraItem()
        item['product_urls']=response.url
        item['files']=response.xpath('//*[@class="thumbnails-selected-image"]/@src')
        item['image_urls']=item['files']
        #print '666666666666666666',item['files']
        return item

请帮助:我的目的是下载图片。

2 个答案:

答案 0 :(得分:0)

默认情况下,FilesPipeline期望文件网址的值为an item's "file_urls" key

  

(...)如果蜘蛛返回带有URL键("file_urls“或”的dict   "image_urls",分别为“文件或图像管道”)   管道会将结果放在相应的键("files""images")下。

您似乎正在使用"product_urls"。要更改管道查找网址的位置,您需要设置FILES_URLS_FIELD = "product_urls"

答案 1 :(得分:0)

使用 ImagesPipeline ,然后使用正则表达式提取图像。

在我的first.py

item['files']= re.findall('front":\{"path":"(.+?)"', response.body)

在settings.py中

IMAGES_STORE = '/home/swapnil/Desktop/AI/myntra/'

ITEM_PIPELINES = {'myntra.pipelines.SomePipeline': 300,
                  'scrapy.pipelines.images.ImagesPipeline': 1,}

这就像一个魅力。