2017-08-15 94 views
0

我是scrapy和Python的新手,所以我的问题可能很简单。通过使用现有的网站指南,我写了一个刮板,它刮掉网站的页面,并在输出文件中显示图像URL,名称和...。我想下载一个目录中的图像,但输出目录是空的!使用scrapy从网站下载并保存图像

这里是我的代码:

myspider.py

import scrapy 
class BrickSetSpider(scrapy.Spider): 
name = 'brick_spider`enter code here`' 
start_urls = ['http://brickset.com/sets/year-2016'] 

def parse(self, response): 
    SET_SELECTOR = '.set' 
    for brickset in response.css(SET_SELECTOR): 

     NAME_SELECTOR = 'h1 a ::text' 
     PIECES_SELECTOR = './/dl[dt/text() = "Pieces"]/dd/a/text()' 
     MINIFIGS_SELECTOR = './/dl[dt/text() = "Minifigs"]/dd[2]/a/text()' 
     IMAGE_SELECTOR = 'img ::attr(src)' 
     yield { 
      'name': brickset.css(NAME_SELECTOR).extract_first(), 
      'pieces': brickset.xpath(PIECES_SELECTOR).extract_first(), 
      'minifigs': brickset.xpath(MINIFIGS_SELECTOR).extract_first(), 
      'image': brickset.css(IMAGE_SELECTOR).extract_first(), 
     } 

    NEXT_PAGE_SELECTOR = '.next a ::attr(href)' 
    next_page = response.css(NEXT_PAGE_SELECTOR).extract_first() 
    if next_page: 
     yield scrapy.Request(
      response.urljoin(next_page), 
      callback=self.parse 
     ) 

settings.py

ITEM_PIPELINES = {'brickset.pipelines.BricksetPipeline': 1} 
IMAGES_STORE = '/home/nmd/brickset/brickset/spiders/output' 


#items.py 
import scrapy 
class BrickSetSpider(scrapy.Item): 
image_urls = scrapy.Field() 
images = scrapy.Field() 
pass 
+0

你没't显示我们可能是最重要的部分,'brickset.pipelines.BricksetPipeline'类的代码。 –

+0

你写的代码只抓取网站的数据,如图像SRC url.so使用yecked数据和下载图像使用wget –

回答

1

Scrapy提供了一个媒体管道,如果你想下载的文件或图像

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1} 

然后,你需要在你的项目添加image_urls的管道要下载的文件,所以更改

yield { 
     'name': brickset.css(NAME_SELECTOR).extract_first(), 
     'pieces': brickset.xpath(PIECES_SELECTOR).extract_first(), 
     'minifigs': brickset.xpath(MINIFIGS_SELECTOR).extract_first(), 
     'image': brickset.css(IMAGE_SELECTOR).extract_first(), 
    } 

yield { 
     'name': brickset.css(NAME_SELECTOR).extract_first(), 
     'pieces': brickset.xpath(PIECES_SELECTOR).extract_first(), 
     'minifigs': brickset.xpath(MINIFIGS_SELECTOR).extract_first(), 
     'image_urls': brickset.css(IMAGE_SELECTOR).extract_first(), 
    } 

欲了解更多详情,请参阅https://doc.scrapy.org/en/latest/topics/media-pipeline.html

+0

感谢您的关注和快速回复@Tarun Lalwani ...我按照您的说法贬低了收益率,但问题没有解决,再次我无法下载图像。我应该检查另一个功能或文件的任何可能的问题?!再次感谢:) – zara

+0

检查你的日志,看看有什么不对吗? –