scrapy 爬取图片

1.scrapy 有下载图片的自带接口,不用我们在去实现

setting.py设置

# 保存log信息的文件名
LOG_LEVEL = "INFO"
# LOG_STDOUT = True
# LOG_ENCODING = 'utf-8'
# # 路径  os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
# LOG_FILE = "info.log"

# 下载延迟
import random
DOWNLOAD_DELAY = random.random() + random.random()
RANDOMIZE_DOWNLOAD_DELAY = True

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'

# 图片下载路径
import os
BASE_DIR = os.path.dirname((os.path.abspath(__file__)))
MEDIA_ALLOW_REDIRECTS = True
IMAGES_STORE = os.path.join(BASE_DIR, "images")

# 在配置文件settings.py中设置IMAGES_THUMBS,它是一个字典,每一项的值是缩略图的尺寸。 开启这个功能后,下载一张图片时,本地会出现3张图片,1张原图片,2张缩略图。
IMAGES_THUMBS = {
    'small': (50, 50),
    'big': (270, 270),
}

# 设置图文件过期时间   30天
IMAGES_EXPIRES = 30
# 在配置文件settings.py中设置IMAGES_MIN_HEIGHT和IMAGES_MIN_WIDTH,它们分别指定需要过滤掉的最小尺寸图片的宽和高。
IMAGES_MIN_WIDTH = 110  # 最小宽度
IMAGES_MIN_HEIGHT = 110  # 最小高度

ITEM_PIPELINES = {
   'steam_image.pipelines.SteamImagePipeline': 300,
   'steam_image.pipelines.SteamDownLoadPipeline': 100,   # 开启下载下载中间件
}

2.spider

# -*- coding: utf-8 -*-
import scrapy, pymysql, copy

class ImagesSpider(scrapy.Spider):
    name = 'images'
    allowed_domains = ['.com']
    start_urls = ['https://www.baidu.com/']

    def parse(self, response):
        db = pymysql.connect(host='localhost', port=3306, database='game', user='root', password='root',
                             charset='utf8', autocommit=True)
        cursor = db.cursor()
        cursor.execute(
            'SELECT id, appid, steam_image, steam_image_600_338 from steam_game_image WHERE id<5')  #  获取图片url
        for appid in cursor.fetchall():
            for i in range(2, 4):
                item = {}
                item['id'] = appid[0]
                item['appid'] = appid[1]
                item['image_url'] = appid[i]   # 下载图片的url    前面要自己获取到 图片的url   可以自己爬
                item['img_name'] = str(item['appid']) + '_' + appid[i].split('/')[-1].split('?')[0]   # 后面图片要命名的名称
                yield item

3.pipelines.py

# -*- coding: utf-8 -*-
from scrapy.pipelines.images import ImagesPipeline  # 导入图片类
import scrapy, os
from steam_image.settings import IMAGES_STORE as IMGS  # 导入图片保存路径

class SteamImagePipeline(object):
    def process_item(self, item, spider):
        return item

# 下载图片管道
class SteamDownLoadPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        yield scrapy.Request(item['image_url'])  # 下载图片

    def item_completed(self, results, item, info):
        print('******the results is********:', results)
        # results = [(True, {'url': 'http://img.ivsky.com/img/bizhi/pre/201101/10/harry_potter5-015.jpg', 'path': 'full/539c5914730497b094e5c98bfdfe19b65f5.jpg', 'checksum': '37d23ffb0ab983ac2da9a9d'})]
        # 真实结构为一个list [(DownLoad_success_or_failure),dict],字典中含有三个键:1、'url':图片路径 2、'path':图片下载后的保存路径 3、'checksum':校验码
        if results[0][0]:  # 可以判断图片下载是否成功   成功显示 Trur  失败显示False
            try:
                os.rename(IMGS + '\\' + results[0][1]['path'],
                          IMGS + '\\' + item['img_name'])  # 默认图片命名是嘻哈值  这里我们要改成自己的需要的图片名称  item['img_name] 是spider我们自己定义传过的
            except Exception as e:
                print('错误类型:{}'.format(e))  # 如果这个文件名称 我们前面的重命名回报错,这里我们要捕捉一下

    def close_spider(self, spider):
        # 完成后删除full目录  默认图片下载在你下载目录下回生成一个full文件,  你下载的图片默认回放在这个文件中
        os.removedirs(IMGS + '\\' + 'full')

  

  

  

scrapy 爬取图片的更多相关文章

  1. 使用Scrapy爬取图片入库,并保存在本地

    使用Scrapy爬取图片入库,并保存在本地 上 篇博客已经简单的介绍了爬取数据流程,现在让我们继续学习scrapy 目标: 爬取爱卡汽车标题,价格以及图片存入数据库,并存图到本地 好了不多说,让我们实 ...

  2. python网络爬虫之使用scrapy爬取图片

    在前面的章节中都介绍了scrapy如何爬取网页数据,今天介绍下如何爬取图片. 下载图片需要用到ImagesPipeline这个类,首先介绍下工作流程: 1 首先需要在一个爬虫中,获取到图片的url并存 ...

  3. python实现scrapy爬取图片到本地时的sha1摘要算法文件名

    2017-03-29 Scrapy爬图片到本地应该会给图片自动生成sha1摘要算法文件名,我第一次用scrapy也不清楚太多,就在程序里自己写了一段实现这一功能的代码.需import hashlib ...

  4. scrapy爬取图片并自定义图片名字

    1   前言 Scrapy使用ImagesPipeline类中函数get_media_requests下载到图片后,默认的图片命名为图片下载链接的哈希值,例如:它的下载链接是http://img.iv ...

  5. 【Python】- scrapy 爬取图片保存到本地、且返回保存路径

    https://blog.csdn.net/xueba8/article/details/81843534

  6. scrapy爬虫,爬取图片

    一.scrapy的安装: 本文基于Anacoda3, Anacoda2和3如何同时安装? 将Anacoda3安装在C:\ProgramData\Anaconda2\envs文件夹中即可. 如何用con ...

  7. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  8. python爬虫---scrapy框架爬取图片,scrapy手动发送请求,发送post请求,提升爬取效率,请求传参(meta),五大核心组件,中间件

    # settings 配置 UA USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, l ...

  9. Scrapy爬取美女图片第三集 代理ip(上) (原创)

    首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...

随机推荐

  1. angular路由事件

    Angular 4检测路由变化,可以使用router.events来监听: 支持的事件类型: NavigationStart:导航开始 NavigationEnd:导航结束 NavigationCan ...

  2. redhat7.7(centOS7)安装ORACLE 11g出坑教程及问题总结与解决

    写在前面: 环境建议:VM 15.5,因为15.5修复了诸多bug,可以在安装过程中省去不少麻烦 添加新的虚拟机安装redhat7.7 准备redhat7.7的安装包...百度云不让上传噢噢噢噢,这里 ...

  3. C语言中,关于排序的问题(输入n个数,输出最大的那个)

    int n,max=0,t; scanf("%d",&n); int a[n],i,k;  //这个a[n]必须要在输入n的值之后才能定义,不然定义不成. for(i=1; ...

  4. DevExpress中TreeList树样式调整

    DevExpress的TreeList默认是没有树状线的,修改TreeLineStyle属性无效,这对于Tree并不好看. 解决方案一 官方解释说对于DevExpress的标准主题是不支持TreeLi ...

  5. Java类加载机制以及双亲委派模型

    一.Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允 ...

  6. es6一句话拾遗

    Symbol最大的作用就是用于消除魔术字符串: Set跟数组的最大区别,就是Set的成员都是唯一的,没有重复:(方法:add(value),has,delete,clear) Map跟对象的最大区别, ...

  7. MySQL中使用group_concat遇到的坑

    在使用group_concat的过程中遇到个问题,这里记录一下:在MySQL中有个配置参数group_concat_max_len,它会限制使用group_concat返回的最大字符串长度,默认是10 ...

  8. Containers vs Serverless:本质区别是什么?

    在云计算领域,容器和无服务器计算已经占据了发展前列. 作者 | Emra Samdan 翻译 | bocloudresearch 一点历史 在不久以前,应用程序的开发.部署和维护要比现在复杂得多,耗时 ...

  9. solidity智能合约implicit conversion异常

    问题场景 在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题. 代码: require(tokenContract.balanceOf(this) >= _num ...

  10. MySQL(10)---自定义函数

    MySQL(10)---自定义函数 之前讲过存储过程,存储过程和自定义函数还是非常相似的,其它的可以认为和存储过程是一样的,比如含义,优点都可以按存储过程的优点来理解. 存储过程相关博客: 1.MyS ...