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. ASM与ASMD

    时序机 状态机 控制器 数据通路之间的关系 样例代码

  2. Vue 修饰符once的方法使用

    once:只执行一次 代码: <!doctype html> <html lang="en"> <head> <meta charset= ...

  3. POJ2001Shortest Prefixes(Trie树)

    传送门 题目大意:求最短唯一前缀 题解:Trie树 把单词一个个插入,每个字母节点v[]++;然后输出时输出到v[]为1的点, v[]=1说明只有这个单词经过. 代码 : #include<io ...

  4. Luogu P5298 [PKUWC2018]Minimax

    好劲的题目啊,根本没往线段树合并方面去想啊 首先每种权值都有可能出现,因此我们先排个序然后一个一个求概率 由于此时数的值域变成\([1,m]\)(离散以后),我们可以设一个DP:\(f_{x,i}\) ...

  5. Mysql 免安装教程 百度云网盘有文件和word说明

    一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 新建—>变量值是解 ...

  6. Java连载52-单例模式的缺点以及抽象类

    一.单例模式 1.单例模式的缺点:单例模式的类型没有子类,无法被继承. 例如:下面的例子,由于父类的构造方法是私有的,所以子类中的构造方法是无法创建的,因为它是引用父类的构造方法 package co ...

  7. 源码学习之Spring (系统架构简单解析)

    Spring Framework 系统架构总览图 Spring Framework的模块依赖关系图 Spring Framework各个模块功能说明 Spring核心模块 模块名称 主要功能 Spri ...

  8. PHP 扩展与 ZEND 引擎的整合

    PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息,比如 phpinfo() 函数是如何列出 PHP 扩展的信息,PHP 扩展中的函数如 ...

  9. 导出HTML5 Canvas图片并上传服务器功能

    这篇文章主要介绍了导出HTML5 Canvas图片并上传服务器功能,文中通过实例代码给大家介绍了HTML5 Canvas转化成图片后上传服务器,代码简单易懂非常不错,具有一定的参考借鉴价值,需要的朋友 ...

  10. C++入门到理解阶段二基础篇(4)——C++运算符

    目录 算术运算符(进行四则运算) 赋值运算符(表达式的值赋给变量) 比较运算符(表达是比较,返回一个真值或假值) 逻辑运算符(返回表格式的结果真或假) 位运算符 杂项运算符 C++ 中的运算符优先级 ...