Scrapy图片下载,自定义图片名字

学习Scrapy过程中发现用Scrapy下载图片时,总是以他们的URL的SHA1 hash值为文件名,如:

图片URL:http://www.example.com/image.jpg

它的SHA1 hash值为:3afec3b4765f8f0a07b78f98c07b83f013567a0a

则下载的图片为:3afec3b4765f8f0a07b78f98c07b83f013567a0a.jpg

目的是下载的图片为:image.jpg或者xxx.jpg

可以通过编写Pipeline来实现。

以下以下载汽车标志为例子(http://www.pcauto.com.cn/zt/chebiao/)

软件版本:Python2.7  Scrapy(1.0.5),Python3目前对Scrapy支持不好,缺少一些模块

一、创建爬虫工程:

进入某目录下:

scrapy startproject Logo
目录结构Logo.
│ scrapy.cfg
│
└─Logo
    │ items.py
    │ pipelines.py
    │ settings.py
    │ __init__.py
    │
    └─spiders
           __init__.py

二、

1、在items.py中定义需要爬去信息的变量名称

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

from scrapy.item import Item, Field

class LogoItem(Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    country=Field()
    carname=Field()
    imageurl=Field()

2、在Logo/Logo/spiders目录下创建logo_spider.py(名字随意),并写如下代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from Logo.items import LogoItem
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.spider import Spider

class LogoSpider(CrawlSpider) : #CrawlSpider用来遍布抓取,通过rules来查找所有符合的URL来爬去信息

    name = "logo" #名字唯一,启动爬虫是用到 scrapy crawl logo -o items.json
    allowed_domains = ["pcauto.com.cn"]
    start_urls = ["http://www.pcauto.com.cn/zt/chebiao/faguo/"]
    rules = (
        Rule(SgmlLinkExtractor(allow = (r‘http://www.pcauto.com.cn/zt/chebiao/.*?/$‘)), follow = True, callback = ‘parse_page‘),
        #将读取的网页进行分析
        # Rule(SgmlLinkExtractor(allow = (‘http://www\.pcauto.com\.cn/zt/chebiao/.*?/‘)), callback = ‘parse_page‘)
        )

    def parse_page(self, response) :
        sel = Selector(response)
        item = LogoItem()
        item[‘country‘] = ‘‘.join(sel.xpath(‘//div[@class="th"]/span[@class="mark"]/a/text()‘).extract())
        item[‘carname‘] = sel.xpath(‘//div[@class="dTxt"]/i[@class="iTit"]/a/text()‘).extract()
        item[‘imageurl‘] = sel.xpath(‘//div[@class="dPic"]/i[@class="iPic"]/a/img/@src‘).extract()
        return item

# class LogoSpider(Spider) :  #抓取单一页面,没有rules

#     name = "logo"
#     allowed_domains = ["pcauto.com.cn"]
#     start_urls = ["http://www.pcauto.com.cn/zt/chebiao/faguo/"]

#     def parse(self, response) :
#         sel = Selector(response)
#         item = LogoItem()
#         item[‘country‘] = ‘‘.join(sel.xpath(‘//div[@class="th"]/span[@class="mark"]/a/text()‘).extract())      #此处 ‘‘.join()是为了在后面为图片自定义名称时使用,若不加‘‘.join(),后面调用item[‘country‘]会得到Unicode码
#         item[‘carname‘] = sel.xpath(‘//div[@class="dTxt"]/i[@class="iTit"]/a/text()‘).extract()
#         item[‘imageurl‘] = sel.xpath(‘//div[@class="dPic"]/i[@class="iPic"]/a/img/@src‘).extract()
#         return item        

当抓取的数据中含有中文时,屏幕上打印的数据和保存的数据都显示为Unicode编码,如:

{"carname": ["\u6807\u81f4", "\u96ea\u94c1\u9f99", "\u5e03\u52a0\u8fea", "\u96f7\u8bfa"], "country": "\u6cd5\u56fd\u6c7d\u8f66\u6807\u5fd7", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446890_peugeot.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446234_citroen.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446234_bugatti.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446890_renault.jpg"]},应该对应为{"carname": ["标致", "雪铁龙", "布加迪", "雷诺"], "country": "法国汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446890_peugeot.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446234_citroen.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446234_bugatti.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446890_renault.jpg"]}

要想保存为中文字符,需在pipelines.py中编写如下:

import json
import codecs

class JsonWithEncodingPipeline(object):

    def __init__(self):
        self.file = codecs.open(‘logo.json‘, ‘w‘, encoding=‘utf-8‘) #当运行scrapy crawl logo -o items.json后,数据默认保存为items.json,里面中文全为Unicode,重新打开或创建一个文件‘logo.json‘,名称随意
def process_item(self, item, spider):
        line = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.file.write(line)
        return item

    def spider_closed(self, spider):
        self.file.close()

已过以上步骤后CMD输入scrapy crawl logo -o items.json,会得到文件logo.json

{"carname": ["起亚", "双龙", "现代"], "country": "韩国汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/hanguo/1108/1446890_kia.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/hanguo/1108/1446890_shuanglong.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/hanguo/1108/1446234_hyundai.jpg"]}
{"carname": ["丰田", "本田", "马自达", "日产", "斯巴鲁", "雷克萨斯", "讴歌", "铃木", "英菲尼迪", "三菱", "光冈"], "country": "日本汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446890_toyota.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446234_honda.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446890_mazda.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446890_nissan.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446890_subaru.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446890_lexus.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446234_acura.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446890_suzuki.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446234_infiniti.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446890_mitsubishi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/riben/1108/1446234_guanggang.jpg"]}
{"carname": ["标致", "雪铁龙", "布加迪", "雷诺"], "country": "法国汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446890_peugeot.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446234_citroen.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446234_bugatti.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/faguo/1108/1446890_renault.jpg"]}
{"carname": ["凯迪拉克", "雪佛兰", "福特", "别克", "克莱斯勒", "悍马", "GMC", "林肯", "吉普", "道奇", "Rossion"], "country": "美国汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446234_cadillac.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446234_chevrolet.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446234_ford.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1511925_buick8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446234_chrysler.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446234_hummer.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446234_gmc.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446890_lincoln.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1446234_jeep.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1447012_dodge.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/meiguo/1108/1451297_rossion.jpg"]}
{"carname": ["斯柯达", "柯尼塞格", "西亚特", "世爵", "萨博", "沃尔沃"], "country": "其他汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/qita/1108/1486098_skoda8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/qita/1108/1446890_koenigsegg.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/qita/1108/1486068_seat8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/qita/1108/1446890_spykers.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/qita/1108/1446890_saab.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/qita/1108/1446890_volvo.jpg"]}
{"carname": ["劳斯莱斯", "保时捷", "奔驰", "宝马", "奥迪", "大众", "劳伦士", "欧宝", "迈巴赫", "Smart"], "country": "德国汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446890_rolls-royce.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446890_porsche.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446234_benz.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446234_bmw.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446234_audi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446890_volkswagen.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1528840_8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446890_opel.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446890_maybach.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/deguo/1108/1446890_smart.jpg"]}
{"carname": ["宾利", "迷你", "路特斯", "阿斯顿马丁", "捷豹", "路虎"], "country": "英国汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/yingguo/1108/1446234_bentley.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yingguo/1108/1446890_mini.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yingguo/1108/1518508_Lotus8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yingguo/1108/1446234_aston-martin.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yingguo/1108/1446234_jaguar.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yingguo/1108/1446890_landrover.jpg"]}
{"carname": ["法拉利", "帕加尼", "玛莎拉蒂", "兰博基尼", "阿尔法罗密欧", "菲亚特"], "country": "意大利汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/yidali/1108/1446234_ferrari.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yidali/1108/1451297_pagani.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yidali/1108/1446890_maserati.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yidali/1108/1447114_5.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yidali/1108/1328198_romio.png", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/yidali/1108/1446234_fiat.jpg"]}
{"carname": ["广汽", "奇瑞", "一汽", "比亚迪", "长城", "MG", "庆铃", "力帆", "陆风", "吉奥", "奔腾", "众泰", "中华", "荣威", "厦门金龙", "英伦汽车", "风神", "海马郑州", "长安(商用)", "启辰", "莲花", "汇众", "华普", "昌河", "福迪", "五菱", "长安", "中兴", "吉林", "威旺", "纳智捷", "宝骏", "依维柯", "解放", "川汽野马", "红旗", "黑豹", "哈飞", "江铃", "福田", "双环", "华泰", "长丰", "东南", "海马", "吉利", "帝豪", "江淮", "东风", "金杯", "瑞麒", "九龙", "黄海", "全球鹰", "开瑞", "威麟", "北京汽车", "理念", "北汽", "南汽", "中顺", "江南", "大迪", "永源", "自由风", "中欧"], "country": "国产汽车标志", "imageurl": ["http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_guangqi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_chery.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_yiqi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_byd.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_greatwall.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_mg.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1592575_121.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_lifan.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_lufeng.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1520427_ja8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_benten.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1573305_zhongtai8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_zhonghua.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_roewe.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_jinlonglianhe.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_yinglun.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1447032_dongfengfengshen.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_haimashangyong.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_changanshangyong.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1508050_qichen5050.png", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_lotus-motor.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1451297_huizong.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_huapu.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_changhe.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_fudi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_wuling.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_chaanjiaoche.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_zhongxing.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_yiqi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1531565_ww8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1486099_nazhijie8060.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_baojun.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_iveco.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1328218_yq.png", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1328218_cq.png", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_hongqi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1451297_heibao.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_hafei.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_jiangling.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_futian.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_shuanghuan.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_huatai.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_changfeng.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_soueast-motor.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_haima.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_geely.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1447012_dihao.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_jac.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1447012_dongfeng.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_huachenjinbei.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_riich.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1451708_jiulong.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_huanghai.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_quanqiuying.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_karry.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_ruilink.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_beijingqiche.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1455155_ln.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_baw.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_xinyatu.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1328198_zs.png", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446234_jiangnan.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1447012_dadi.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1446890_ufo.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1451297_ziyoufeng.jpg", "http://img0.pcauto.com.cn/pcauto/zt/chebiao/guochan/1108/1451297_zhongou.jpg"]}

3、上面只是对抓取的数据进行了保存,还未下载图片,打开pipelines.py

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem
from scrapy import Request
import json
import codecs

class JsonWithEncodingPipeline(object):

    def __init__(self):
        self.file = codecs.open(‘logo.json‘, ‘w‘, encoding=‘utf-8‘)

    def process_item(self, item, spider):
        line = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.file.write(line)
        return item

    def spider_closed(self, spider):
        self.file.close()

class DownloadImagesPipeline(ImagesPipeline):
    def get_media_requests(self,item,info): #下载图片
        for image_url in item[‘imageurl‘]:
            yield Request(image_url,meta={‘item‘:item,‘index‘:item[‘imageurl‘].index(image_url)}) #添加meta是为了下面重命名文件名使用

    def file_path(self,request,response=None,info=None):
        item=request.meta[‘item‘] #通过上面的meta传递过来item
        index=request.meta[‘index‘] #通过上面的index传递过来列表中当前下载图片的下标

        #图片文件名,item[‘carname‘][index]得到汽车名称,request.url.split(‘/‘)[-1].split(‘.‘)[-1]得到图片后缀jpg,png
        image_guid = item[‘carname‘][index]+‘.‘+request.url.split(‘/‘)[-1].split(‘.‘)[-1]
        #图片下载目录 此处item[‘country‘]即需要前面item[‘country‘]=‘‘.join()......,否则目录名会变成\u97e9\u56fd\u6c7d\u8f66\u6807\u5fd7\xxx.jpg
        filename = u‘full/{0}/{1}‘.format(item[‘country‘], image_guid)
        return filename

4、setting.py中

BOT_NAME = ‘Logo‘

SPIDER_MODULES = [‘Logo.spiders‘]
NEWSPIDER_MODULE = ‘Logo.spiders‘

ITEM_PIPELINES={
    # ‘sucai.pipelines.SucaiPipeline‘:1
    ‘Logo.pipelines.JsonWithEncodingPipeline‘:2,
    ‘Logo.pipelines.DownloadImagesPipeline‘:1
}
IMAGES_STORE=‘F:\Logo\picture‘  

然后运行scrapy crawl logo -o items.json,

Logo.
│  items.json
│  logo.json
│  scrapy.cfg
│
├─Logo
│  │  items.py
│  │  items.pyc
│  │  pipelines.py
│  │  pipelines.pyc
│  │  settings.py
│  │  settings.pyc
│  │  __init__.py
│  │  __init__.pyc
│  │
│  └─spiders
│          logo_spider.py
│          logo_spider.pyc
│          __init__.py
│          __init__.pyc
│
└─picture
    └─full
        ├─其他汽车标志
        │      世爵.jpg
        │      斯柯达.jpg
        │      柯尼塞格.jpg
        │      沃尔沃.jpg
        │      萨博.jpg
        │      西亚特.jpg
        │
        ├─国产汽车标志
        │      MG.jpg
        │      一汽.jpg
        │      东南.jpg
        │      东风.jpg
        │      中兴.jpg
        │      中华.jpg
        │      中欧.jpg
        │      中顺.png
        │      九龙.jpg
        │      五菱.jpg
        │      众泰.jpg
        │      依维柯.jpg
        │      全球鹰.jpg
        │      力帆.jpg
        │      北京汽车.jpg
        │      北汽.jpg
        │      华普.jpg
        │      华泰.jpg
        │      南汽.jpg
        │      厦门金龙.jpg
        │      双环.jpg
        │      吉利.jpg
        │      吉奥.jpg
        │      启辰.png
        │      哈飞.jpg
        │      大迪.jpg
        │      奇瑞.jpg
        │      奔腾.jpg
        │      威旺.jpg
        │      威麟.jpg
        │      宝骏.jpg
        │      川汽野马.png
        │      帝豪.jpg
        │      广汽.jpg
        │      庆铃.jpg
        │      开瑞.jpg
        │      昌河.jpg
        │      比亚迪.jpg
        │      永源.jpg
        │      汇众.jpg
        │      江南.jpg
        │      江淮.jpg
        │      江铃.jpg
        │      海马.jpg
        │      海马郑州.jpg
        │      理念.jpg
        │      瑞麒.jpg
        │      福田.jpg
        │      福迪.jpg
        │      红旗.jpg
        │      纳智捷.jpg
        │      自由风.jpg
        │      英伦汽车.jpg
        │      荣威.jpg
        │      莲花.jpg
        │      解放.png
        │      金杯.jpg
        │      长丰.jpg
        │      长城.jpg
        │      长安.jpg
        │      长安(商用).jpg
        │      陆风.jpg
        │      风神.jpg
        │      黄海.jpg
        │      黑豹.jpg
        │
        ├─德国汽车标志
        │      Smart.jpg
        │      保时捷.jpg
        │      劳伦士.jpg
        │      劳斯莱斯.jpg
        │      大众.jpg
        │      奔驰.jpg
        │      奥迪.jpg
        │      宝马.jpg
        │      欧宝.jpg
        │      迈巴赫.jpg
        │
        ├─意大利汽车标志
        │      兰博基尼.jpg
        │      帕加尼.jpg
        │      法拉利.jpg
        │      玛莎拉蒂.jpg
        │      菲亚特.jpg
        │      阿尔法罗密欧.png
        │
        ├─日本汽车标志
        │      三菱.jpg
        │      丰田.jpg
        │      光冈.jpg
        │      斯巴鲁.jpg
        │      日产.jpg
        │      本田.jpg
        │      英菲尼迪.jpg
        │      讴歌.jpg
        │      铃木.jpg
        │      雷克萨斯.jpg
        │      马自达.jpg
        │
        ├─法国汽车标志
        │      布加迪.jpg
        │      标致.jpg
        │      雪铁龙.jpg
        │      雷诺.jpg
        │
        ├─美国汽车标志
        │      GMC.jpg
        │      Rossion.jpg
        │      克莱斯勒.jpg
        │      凯迪拉克.jpg
        │      别克.jpg
        │      吉普.jpg
        │      悍马.jpg
        │      林肯.jpg
        │      福特.jpg
        │      道奇.jpg
        │      雪佛兰.jpg
        │
        ├─英国汽车标志
        │      宾利.jpg
        │      捷豹.jpg
        │      路特斯.jpg
        │      路虎.jpg
        │      迷你.jpg
        │      阿斯顿马丁.jpg
        │
        └─韩国汽车标志
                双龙.jpg
                现代.jpg
                起亚.jpg
时间: 2024-10-13 19:46:58

Scrapy图片下载,自定义图片名字的相关文章

图片下载本地缓存时间戳显示图片方法

来源:http://ask.dcloud.net.cn/article/511 源码下载 参考文章http://ask.dcloud.net.cn/article/256http://ask.dcloud.net.cn/article/397 说明:为了方便,里面使用的图片来源是从上面文章中的源码项目获取的.说明:参考了上面文章中的思路,然后自己重新写了一个较为完整的图片本地缓存显示工具.功能1.第一次显示图片时下载到本地,然后之后如果本地存在缓存(根据url),则显示本地缓存的图片2. 基于p

猫猫学iOS(五十五)多线程网络之图片下载框架之SDWebImage

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil

js 下载远程图片

<!DOCTYPE html><html lang="en"><head> <script src="jquery/jquery-1.9.1.min.js"></script> <script src="jquery/jquery.min.js"></script> <meta charset="UTF-8"> <title&

scrapy 中如何自定义 pipeline 下载图片

这里以一个很简单的小爬虫为例,爬取 壹心理 网站的阅读页面第一页的所有文章及其对应的图片,文章页面如下: 创建项目 首先新建一个 scrapy 项目,安装好相关依赖(步骤可参考:scrapy 安装及新建爬虫项目并运行). 新建一个爬虫: scrapy genspider xinli001 'www.xinli001.com/info' 此时项目工程目录与新建的爬虫如下: 爬取信息并编写图片自动下载逻辑 本次主要是记录自定义 pipeline 来爬取图片,所以只是简单的选取一些信息来爬取,包括文章

Scrapy基础————图片下载后将本地路径添加到Item中

前边讲到简单的图片下载,但是怎样将图片的本地路径和存储在Item中的数据对应起来,所以本篇博文讲解到如何将 本地的下载后的图片路径写入到Item中 思路:自定义pipline,多加个管道,该管道继承下载图片的类,并重写与Item 交互的方法,从众提取到本地路径,并返回这个Item交给下一个pipline管道 具体代码: 先导入 from scrapy.pipelines.images import ImagesPipeline 1 #补充Item的字段,将文章列表页的图片下载下来,并将图片的路径

scrapy (2)下载图片及存储信息

例1:scrapy项目的使用(利用item收集抓取的返回值) 1.创建scrapy项目 scrapy startproject booklist New Scrapy project 'booklist', using template directory '/usr/local/lib/python3.6/site-packages/scrapy/templates/project', created in:     /Users/yuanjicai/booklist You can star

(8)分布式下的爬虫Scrapy应该如何做-图片下载(源码放送)

  转载主注明出处:http://www.cnblogs.com/codefish/p/4968260.html 在爬虫中,我们遇到比较多需求就是文件下载以及图片下载,在其它的语言或者框架中,我们可能在经过数据筛选,然后异步的使用文件下载类来达到目的,Scrapy框架中本身已经实现了文件及图片下载的文件,相当的方便,只要几行代码,就可以轻松的搞定下载.下面我将演示如何使用scrapy下载豆瓣的相册首页内容. 优点介绍: 1)自动去重 2)异步操作,不会阻塞 3)可以生成指定尺寸的缩略图 4)计算

scrapy save mysql or mongo, 和图片下载保存

# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html import pymongo import pymysql from scrapy import Request f

爬虫入门-5-2.scrapy框架下载图片

scrapy startproject bmw cd bmw scrapy genspider bmw5 'autohome.com.cn' 第一种方式:不使用ImagePipeline bww5.py: 1 import scrapy 2 from bmw.items import BmwItem 3 4 5 class Bmw5Spider(scrapy.Spider): 6 name = 'bmw5' 7 allowed_domains = ['autohome.com.cn'] 8 st