十五匆浙、Scrapy框架–實(shí)戰(zhàn)–zcool網(wǎng)站精選圖高速下載(4)
Scrapy下載圖片
1刃泌、解析圖片的鏈接。
2勺远、定義一個(gè)item,上面有兩個(gè)字段时鸵,一個(gè)是image_urls胶逢,一個(gè)是images。其中images_urls是用來(lái)存儲(chǔ)圖片的鏈接饰潜,由開(kāi)發(fā)者把數(shù)據(jù)爬取下來(lái)后添加的初坠。
3、使用scrapy.pipelines.images.ImagesPipeline來(lái)作為數(shù)據(jù)保存的pipeline彭雾。
4碟刺、在settings.py中設(shè)置IMAGES_STORE來(lái)定義圖片下載的路徑。
5薯酝、如果想要有更復(fù)雜的圖片保存的路徑需求半沽,可以重寫ImagePipeline的file_path方法,這個(gè)方法用來(lái)返回每個(gè)圖片的保存路徑吴菠。
6者填、而file_path 方法沒(méi)有item對(duì)象,所以我們還需要重寫get_media_requests方法做葵,來(lái)把item綁定到request上占哟。示例代碼如下:
class ImagedownloadPipeline(ImagesPipeline):
??? def get_media_requests(self, item, info):
??????? media_requests =super(ImagedownloadPipeline, self).get_media_requests(item, info)
??????? for media_request in media_requests:
??????????? media_request.item = item
??????? return media_requests
?
??? def file_path(self, request, response=None,info=None):
??????? origin_path =super(ImagedownloadPipeline, self).file_path(request, response, info)
??????? title = request.item['title']
??????? title = re.sub(r,'[\\/:\*\?"<>]', "", title)
?
??????? save_path =os.path.join(settings.IMAGES_STORE, title)
??????? if not os.path.exists(save_path):
??????????? os.mkdir(save_path)
??????? imsge_name =origin_path.replace("full/", "")
??????? return os.path.join(save_path,imsge_name)
7、在創(chuàng)建文件夾的時(shí)候酿矢,要注意一些特殊字符是不允許作為文件夾的名字而存在的,那么我們就可以通過(guò)正則表達(dá)式來(lái)刪掉???? r, '[\\/:\*\?"<>]' 。
上一篇文章 第六章 Scrapy框架(十四) 2020-03-16 地址:
http://www.reibang.com/p/2febb184009d
下一篇文章 第六章 Scrapy框架(十六) 2020-03-18 地址:
http://www.reibang.com/p/99c60ce24571
以上資料內(nèi)容來(lái)源網(wǎng)絡(luò)呼股,僅供學(xué)習(xí)交流喂链,侵刪請(qǐng)私信我,謝謝严肪。