scrapy 爬取图片
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 爬取图片的更多相关文章
- 使用Scrapy爬取图片入库,并保存在本地
使用Scrapy爬取图片入库,并保存在本地 上 篇博客已经简单的介绍了爬取数据流程,现在让我们继续学习scrapy 目标: 爬取爱卡汽车标题,价格以及图片存入数据库,并存图到本地 好了不多说,让我们实 ...
- python网络爬虫之使用scrapy爬取图片
在前面的章节中都介绍了scrapy如何爬取网页数据,今天介绍下如何爬取图片. 下载图片需要用到ImagesPipeline这个类,首先介绍下工作流程: 1 首先需要在一个爬虫中,获取到图片的url并存 ...
- python实现scrapy爬取图片到本地时的sha1摘要算法文件名
2017-03-29 Scrapy爬图片到本地应该会给图片自动生成sha1摘要算法文件名,我第一次用scrapy也不清楚太多,就在程序里自己写了一段实现这一功能的代码.需import hashlib ...
- scrapy爬取图片并自定义图片名字
1 前言 Scrapy使用ImagesPipeline类中函数get_media_requests下载到图片后,默认的图片命名为图片下载链接的哈希值,例如:它的下载链接是http://img.iv ...
- 【Python】- scrapy 爬取图片保存到本地、且返回保存路径
https://blog.csdn.net/xueba8/article/details/81843534
- scrapy爬虫,爬取图片
一.scrapy的安装: 本文基于Anacoda3, Anacoda2和3如何同时安装? 将Anacoda3安装在C:\ProgramData\Anaconda2\envs文件夹中即可. 如何用con ...
- scrapy爬虫系列之三--爬取图片保存到本地
功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...
- python爬虫---scrapy框架爬取图片,scrapy手动发送请求,发送post请求,提升爬取效率,请求传参(meta),五大核心组件,中间件
# settings 配置 UA USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, l ...
- Scrapy爬取美女图片第三集 代理ip(上) (原创)
首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...
随机推荐
- java8-10-Stream的终止操作
Stream的终止操作 * allMatch 是否匹配所有 * anyMatch 是否匹配一个 * noneMatch 是否没有匹配一个 * findFirst 返回第一个 * count ...
- python通过重启线程,实现服务的热加载
这个思路后来证明不能用于工作. 因为线程调用没有及时返回,所以不能用这种方式来重启服务. 但作为脑洞,也应该作个记录. import os import shutil import datetime ...
- 定义私有指令 v-fontweight
// 这是一个私有的指令 他是在vm这个实例对象里里面的 所以说是私有的 directives 多一个s // 在css中是font-Weight.在第二个字母的大写该为小写,去掉横线. // 这中写 ...
- Day11 - Python基础11 模块学习——optparse
Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...
- MVC、MTV、FBV、CBV、母版和继承:
cookie session cookie的定义: 保存在浏览器上的一组组键值对 (请求头) 为什么要有? http协议是无状态,每次的请求之间是相互独立的,没有办法保存状态. Django中操作co ...
- LG2602/BZOJ1833 「ZJOI2010」数字计数 数位DP
问题描述 LG2602 BZOJ1833 题解 数位\(\mathrm{DP}\)板子题. 注意限制位数.前导零. \([a,b]=[1,b]-[1,a-1]\) \(\mathrm{Code}\) ...
- bzoj3293 分金币
题目链接 problem 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使 得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. so ...
- 利用re处理数据
re模块为Python提供正则表达式功能,我们可以用它来处理数据 大多数时候我们用Python读取文件数据读进来都是字符串,想要提取里面想要的数据用正则表达式是个很不错的手段 下面是一个从读取数据中提 ...
- Ubuntu 16.04 安装 mujoco, mujoco_py 和 gym
Mujoco (1)官网(https://www.roboti.us/license.html)注册 license,教育邮箱注册可以免费使用一年.注意:一个邮箱账号只能供一台主机使用. 填写个人信息 ...
- 2019 年 GitHub 上最热门的 Java 开源项目
1.JavaGuide https://github.com/Snailclimb/JavaGuide Star 22668 [Java 学习 + 面试指南] 一份涵盖大部分 Java 程序员所需要掌 ...