首先說說我的思路:
1幽七,存圖片時我想存在本地
2景殷,存圖片時我想保存圖片原有的名字,(以后好方便查詢)
首先 看看官方 API
import scrapy
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem
class MyImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for image_url in item['image_urls']:
yield scrapy.Request(image_url)
def item_completed(self, results, item, info):
image_paths = [x['path'] for ok, x in results if ok]
if not image_paths:
raise DropItem("Item contains no images")
item['image_paths'] = image_paths
return item
下面是我的改進(jìn),我則是想保存圖片原有名字
import scrapy
class ImagedownloadPipeline(object):
def process_item(self, item, spider):
return item
class Imagedown(ImagesPipeline):
def file_path(self, request, response=None, info=None):
item = request.meta["item"]
filename = item["img_name"].replace("/","-")+".jpg"#這里我想說明一下 我保存的圖片名字 中有'/'個人感覺不協(xié)調(diào)猿挚,就用'-'代替咐旧。了注意加上后綴'.jpg' 不然保存不成功哦
return filename
def get_media_requests(self, item, info):
'''
#如果item[urls]里里面是列表,用下面
urls= item['urls']
for url in urls:
yield scrapy.Request(url,meta={"item",item})
'''
# 如果item[urls]里里面是一個圖片地址绩蜻,用這下面的
yield scrapy.Request(item['img_urls'], meta={"item": item})##切記這里的meta 傳的時候 是一個字典
在setting.py 中加入
BOT_NAME = 'imagedownload'
IMAGES_STORE = "e:/pics"#(注意這里表示你圖片保存的地址)
ITEM_PIPELINES = {'imagedownload.pipelines.Imagedown': 300}
到此scrapy 里面的主要設(shè)置已經(jīng)介紹完畢铣墨,希望對你們有所幫助,