scrapy 图片管道学习笔记
使用scrapy首先需要安装
python环境使用3.6
windows下激活进入python3.6环境
activate python36
mac下
mac@macdeMacBook-Pro:~$ source activate python36
(python36) mac@macdeMacBook-Pro:~$
安装 scrapy
(python36) mac@macdeMacBook-Pro:~$ pip install scrapy
(python36) mac@macdeMacBook-Pro:~$ scrapy --version
Scrapy 1.8. - no active project Usage:
scrapy <command> [options] [args] Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy [ more ] More commands available when run from project directory Use "scrapy <command> -h" to see more info about a command
(python36) mac@macdeMacBook-Pro:~$ scrapy startproject images
New Scrapy project 'images', using template directory '/Users/mac/anaconda3/envs/python36/lib/python3.6/site-packages/scrapy/templates/project', created in:
/Users/mac/images You can start your first spider with:
cd images
scrapy genspider example example.com (python36) mac@macdeMacBook-Pro:~$ cd images
(python36) mac@macdeMacBook-Pro:~/images$ scrapy genspider -t crawl pexels www.pexels.com
Created spider 'pexels' using template 'crawl' in module:
images.spiders.pexels
(python36) mac@macdeMacBook-Pro:~/images$
setting.py里面 关闭robot.txt遵循
ROBOTSTXT_OBEY = False
分析目标网站规则 www.pexels.com
https://www.pexels.com/photo/man-using-black-camera-3136161/
https://www.pexels.com/video/beach-waves-and-sunset-855633/
https://www.pexels.com/photo/white-vehicle-2569855/
https://www.pexels.com/photo/monochrome-photo-of-city-during-daytime-3074526/
得出要抓取的规则
rules = (
Rule(LinkExtractor(allow=r'^https://www.pexels.com/photo/.*/$'), callback='parse_item', follow=True),
) 图片管道 要定义两个item
class ImagesItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
image_urls = scrapy.Field()
images = scrapy.Field()
images_url是抓取到的图片url 需要传递过来
images 检测图片完整性,但是我打印好像没看到这个字段
pexels.py里面引入item 并且定义对象
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule from images.items import ImagesItem class PexelsSpider(CrawlSpider):
name = 'pexels'
allowed_domains = ['www.pexels.com']
start_urls = ['http://www.pexels.com/'] rules = (
Rule(LinkExtractor(allow=r'^https://www.pexels.com/photo/.*/$'), callback='parse_item', follow=False),
) def parse_item(self, response):
item = ImagesItem()
item['image_urls'] = response.xpath('//img[contains(@src,"photos")]/@src').extract()
print(item['image_urls'])
return item
设置setting.py里面启用图片管道 设置存储路劲
ITEM_PIPELINES = {
#'images.pipelines.ImagesPipeline': ,
'scrapy.pipelines.images.ImagesPipeline':
}
IMAGES_STORE = '/www/crawl'
# 图片的下载地址 根据item中的字段来设置哪一个内容需要被下载
IMAGES_URLS_FIELD = 'image_urls'
启动爬虫
scrapy crawl pexels --nolog
发现已经下载下来了

但是下载的图片不是高清的,要处理下图片的后缀
setting.py打开默认管道 设置优先级高一些
ITEM_PIPELINES = {
'images.pipelines.ImagesPipeline': 1,
'scrapy.pipelines.images.ImagesPipeline': 2
}
管道文件里面对后缀进行处理去掉
class ImagesPipeline(object):
def process_item(self, item, spider):
tmp = item['image_urls']
item['image_urls'] = []
for i in tmp:
if '?' in i:
item['image_urls'].append(i.split('?')[0])
else:
item['image_urls'].append(i) return item
最终下载的就是大图了,但是图片管道还是默认对图片会有压缩的,所以如果使用文件管道下载的才是完全的原图,非常大。
如果不下载图片,直接存图片url到mysql的话参考
https://www.cnblogs.com/php-linux/p/11792393.html
图片管道 配置最小宽度和高度分辨率
IMAGES_MIN_HEIGHT=800
IMAGES_MIN_WIDTH=600
IMAGES_EXPIRES=90 天 不会对重复的进行下载
生成缩略图
IMAGES_THUMBS={
‘small’:(50,50),
'big':(600,600)
}
scrapy 图片管道学习笔记的更多相关文章
- scrapy爬虫框架学习笔记(一)
scrapy爬虫框架学习笔记(一) 1.安装scrapy pip install scrapy 2.新建工程: (1)打开命令行模式 (2)进入要新建工程的目录 (3)运行命令: scrapy sta ...
- css 3 背景图片为渐变色(渐变色背景图片) 学习笔记
6年不研究CSS发现很多现功能都没有用过,例如渐变色,弹性盒子等,年前做过一个简单的管理系统,由于本人美工不好,设计不出好看的背景图片,偶然百度到背景图片可以使用渐变色(感觉发现了新大陆).以后的项目 ...
- Scrapy 爬虫框架学习笔记(未完,持续更新)
Scrapy 爬虫框架 Scrapy 是一个用 Python 写的 Crawler Framework .它使用 Twisted 这个异步网络库来处理网络通信. Scrapy 框架的主要架构 根据它官 ...
- Angular2之管道学习笔记
管道.可以把一个输出流与另一个输入流连接起来.类似 linux.gulp都有应用. 在Angular2中使用管道非常方便.Angular2中本身提供了一些内置管道.当然也可以自定义管道. 文档链接:h ...
- Scrapy:学习笔记(2)——Scrapy项目
Scrapy:学习笔记(2)——Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为“demo” scrapy startproject demo cd demo 稍等片刻后,Scr ...
- scrapy 学习笔记1
最近一段时间开始研究爬虫,后续陆续更新学习笔记 爬虫,说白了就是获取一个网页的html页面,然后从里面获取你想要的东西,复杂一点的还有: 反爬技术(人家网页不让你爬,爬虫对服务器负载很大) 爬虫框架( ...
- 机器学习框架ML.NET学习笔记【6】TensorFlow图片分类
一.概述 通过之前两篇文章的学习,我们应该已经了解了多元分类的工作原理,图片的分类其流程和之前完全一致,其中最核心的问题就是特征的提取,只要完成特征提取,分类算法就很好处理了,具体流程如下: 之前介绍 ...
- 机器学习框架ML.NET学习笔记【7】人物图片颜值判断
一.概述 这次要解决的问题是输入一张照片,输出人物的颜值数据. 学习样本来源于华南理工大学发布的SCUT-FBP5500数据集,数据集包括 5500 人,每人按颜值魅力打分,分值在 1 到 5 分之间 ...
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
随机推荐
- JavaScript 反射和属性赋值!
function Antzone(){ this.webName="蚂蚁部落"; this.age=6; } Antzone.prototype={ address:"青 ...
- IPv4分类
IPv4地址按逻辑层次分为五类 A类 保留给政府机构 A类地址第1字节为网络地址,其它3个字节为主机地址.它的第1个字节的第一位固定为0. A类地址网络号范围:1.0.0.0 - 126.0.0.0 ...
- PMP 第6章错题总结
项目进度管理的步骤: 1.项目的商业价值指特定项目的成果能够为相关方带来的有形的或无形的效益. 其中有形的效益包括:股东权益.市场份额.货币资产 无形的效益包括:品牌认知度.商誉.战略一致性等2. ...
- mysql数据库每天备份
以备份mysql下的test数据库为例,备份到/home/data 使用mysqldunp命令 dump.sh mysqldump -h127. -uadmin -P3306 -ppassword t ...
- socket-02
# -- coding: utf-8 -- _author__ = "HuaQiang Yan" import socket def handle_request(client): ...
- PHP ob_gzhandler的理解
PHP ob_gzhandler的理解那么对于我们这些没有开启mod_deflate模块的主机来说,就只能采用ob_gzhandler函数来压缩了,它的压缩效果和mod_deflate相比,相差很小, ...
- docker 学习总结
Docker 是一个容器工具,提供虚拟环境.解决了软件的环境配置和依赖问题,让软件可以带环境和依赖的安装. Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容 ...
- lua【卤鹅】总结
转自:https://www.cnblogs.com/reblue520/p/10767428.html 编写一个简单的hello world程序 test.lua 如果觉得简单,可以给一个for循环 ...
- redis常用命令及持久化机制
redis 常用命令 查找redis服务文件 find / -name redis-server 查找配置文件 find / -name redis.conf 启动服务时候,要指定配置文件 启动r ...
- 快速排序(Quick Sort)C语言
已知数组 src 如下: [5, 3, 7, 6, 4, 1, 0, 2, 9, 10, 8] 快速排序1 在数组 src[low, high] 中,取 src[low] 作为 关键字(key) . ...