




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第python爬虫Scrapy框架:媒体管道原理学习分析目录一、媒体管道1.1、媒体管道的特性媒体管道实现了以下特性:图像管道具有一些额外的图像处理功能:1.2、媒体管道的设置二、ImagesPipeline类简介三、小案例:使用图片管道爬取百度图片3.1、spider文件3.2、items文件3.3、settings文件3.4、pipelines文件
一、媒体管道
1.1、媒体管道的特性
媒体管道实现了以下特性:
避免重新下载最近下载的媒体
指定存储位置(文件系统目录,AmazonS3bucket,谷歌云存储bucket)
图像管道具有一些额外的图像处理功能:
将所有下载的图片转换为通用格式(JPG)和模式(RGB)
生成缩略图
检查图像的宽度/高度,进行最小尺寸过滤
1.2、媒体管道的设置
ITEM_PIPELINES={'scrapy.pipelines.images.ImagesPipeline':120}启用
FILES_STORE='/path/to/valid/dir'文件管道存放位置
IMAGES_STORE='/path/to/valid/dir'图片管道存放位置
FILES_URLS_FIELD='field_name_for_your_files_urls'自定义文件url字段
FILES_RESULT_FIELD='field_name_for_your_processed_files'自定义结果字段
IMAGES_URLS_FIELD='field_name_for_your_images_urls'自定义图片url字段
IMAGES_RESULT_FIELD='field_name_for_your_processed_images'结果字段
FILES_EXPIRES=90文件过期时间默认90天
IMAGES_EXPIRES=90图片过期时间默认90天
IMAGES_THUMBS={'small':(50,50),'big':(270,270)}缩略图尺寸
IMAGES_MIN_HEIGHT=110过滤最小高度
IMAGES_MIN_WIDTH=110过滤最小宽度
MEDIA_ALLOW_REDIRECTS=True是否重定向
二、ImagesPipeline类简介
#解析settings里的配置字段
def__init__(self,store_uri,download_func=None,settings=None)
#图片下载
defimage_downloaded(self,response,request,info)
#图片获取图片大小的过滤#缩略图的生成
defget_images(self,response,request,info)
#转化图片格式
defconvert_image(self,image,size=None)
#生成媒体请求可重写
defget_media_requests(self,item,info)
return[Request(x)forxinitem.get(self.images_urls_field,[])]#得到图片url变成请求发给引擎
#此方法获取文件名进行改写
defitem_completed(self,results,item,info)
#文件路径
deffile_path(self,request,response=None,info=None)
#缩略图的存储路径
defthumb_path(self,request,thumb_id,response=None,info=None):
三、小案例:使用图片管道爬取百度图片
(当然不使用图片管道的话也是可以爬取百度图片的,但这还需要我们去分析网页的代码,还是有点麻烦,使用图片管道就可以省去这个步骤了)
3.1、spider文件
注意:由于需要添加所有的请求头,所以我们要重写start_requests函数
importre
importscrapy
from..itemsimportDbimgItem
classDbSpider(scrapy.Spider):
name='db'
#allowed_domains=['']
start_urls=['/search/indextn=baiduimageipn=rct=201326592cl=2lm=-1st=-1fm=indexfr=hs=0xthttps=111110sf=1fmq=pv=ic=0nc=1z=se=1showtab=0fb=0width=height=face=0istype=2ie=utf-8word=%E7%8B%97oq=%E7%8B%97rsp=-1']
defstart_requests(self):#因为需要添加所有的请求头,所以我们要重写start_requests函数
#url='/search/indextn=baiduimageipn=rct=201326592cl=2lm=-1st=-1fm=indexfr=hs=0xthttps=111110sf=1fmq=pv=ic=0nc=1z=se=1showtab=0fb=0width=height=face=0istype=2ie=utf-8word=%E7%8B%97oq=%E7%8B%97rsp=-1'
headers={
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding":"gzip,deflate,br",
"Accept-Language":"zh-CN,zh;q=0.9",
"Cache-Control":"max-age=0",
"Connection":"keep-alive",
"Cookie":"BIDUPSID=4B61D634D704A324E3C7E274BF11F280;PSTM=1624157516;BAIDUID=4B61D634D704A324C7EA5BA47BA5886E:FG=1;__yjs_duid=1_f7116f04cddf75093b9236654a2d70931624173362209;BAIDUID_BFESS=101022AEE931E08A9B9A3BA623709CFE:FG=1;BDORZ=B490B5EBF6F3CD402E515D22BCDA1598;BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm;cleanHistoryStatus=0;H_PS_PSSID=34099_33969_34222_31660_34226_33848_34113_34073_33607_34107_34134_34118_26350_22159;delPer=0;PSINO=6;BA_HECTOR=24ak842ka421210koq1gdtj070r;BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm;userFrom=;firstShowTip=1;indexPageSugList=%5B%22%E7%8B%97%22%2C%22%E7%8C%AB%E5%92%AA%22%2C%22%E5%B0%8F%E9%80%8F%E6%98%8E%22%5D;ab_sr=1.0.1_OGYwMTZiMjg5ZTNiYmUxODIxOTgyYTllZGMyMzhjODE2ZWE5OGY4YmEyZWVjOGZhOWIxM2NlM2FhZTQxMmFjODY0OWZiNzQxMjVlMWIyODVlZWFiZjY2NTQyMTZhY2NjNTM5NDNmYTFmZjgxMTlkOGYxYTUzYTIzMzA0NDE3MGNmZDhkYTBkZmJiMmJhZmFkZDNmZTM1ZmI2MWZkNzYyYQ==",
"Host":"",
"Referer":"/",
"sec-ch-ua":'"Not;ABrand";v="99","GoogleChrome";v="91","Chromium";v="91"',
"sec-ch-ua-mobile":"0",
"Sec-Fetch-Dest":"document",
"Sec-Fetch-Mode":"navigate",
"Sec-Fetch-Site":"same-origin",
"Sec-Fetch-User":"1",
"Upgrade-Insecure-Requests":"1",
"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/91.0.4472.106Safari/537.36"
forurlinself.start_urls:
yieldscrapy.Request(url,headers=headers,callback=self.parse,dont_filter=True)
defparse(self,response):
img_urls=re.findall('"thumbURL":"(.*)"',response.text)
#print(img_urls)
item=DbimgItem()
item['image_urls']=img_urls
yielditem
3.2、items文件
importscrapy
classDbimgItem(scrapy.Item):
#definethefieldsforyouritemherelike:
#name=scrapy.Field()
image_urls=scrapy.Field()
3.3、settings文件
ROBOTSTXT_OBEY=False
#打开我们写的管道
ITEM_PIPELINES={
#'dbimg.pipelines.DbimgPipeline':300,
'dbimg.pipelines.ImgPipe':300,
#图片存放位置
IMAGES_STORE='D:/pythontest/爬虫/scrapy6/dbimg/imgs'
3.4、pipelines文件
importos
fromitemadapterimportItemAdapter
fromscrapy.pipelines.imagesimportImagesPipeline
importsettings
defitem_completed(self,results,item,info):
withsuppress(KeyError):
ItemAdapter(item)[self.images_result_field]=[xforok,xinresultsifok]
returnitem
classImgPipe(ImagesPipeline):
num=0
#重写此函数修改获取的图片的名字不然图片名称就是一串数字字母
defitem_completed(self,results,item,info):
images_path=[x['path']forok,xinresultsifok]
#print('results:',results)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年辽宁省盘锦市三上数学期末达标检测试题含解析
- 2025-2026学年吉林省长春市汽车经济技术开发区第二实验联盟三上数学期末统考试题含解析
- 2025-2026学年安徽省阜阳市三上数学期末检测模拟试题含解析
- 2024年将乐县三年级数学第一学期期末调研试题含解析
- 2025年执业药师考试考生真实反应试题及答案
- 自考行政管理专业发展前景试题及答案
- 自考行政管理课程评价试题及答案
- 2025年主管护师考试真题试题及答案
- 校园语文考试试题及答案
- 护理操作的细节与试题及答案
- 2024中国充电基础设施服务质量发展报告-车百智库+小桔充电
- 消防维修期间无水应急预案
- DNA鉴定技术在刑事侦查中的运用
- (完整word版)体检报告单模版
- 警示片制作策划方案
- 掌握认知重构的基本技巧
- 新能源综合能源系统的设计与优化
- 中国居民膳食指南(全)
- 《数据可视化》期末考试复习题库(含答案)
- 环境社会学考试必考点
- 多模态医学影像融合
评论
0/150
提交评论