python爬虫Scrapy框架-媒体管道原理学习分析_第1页
python爬虫Scrapy框架-媒体管道原理学习分析_第2页
python爬虫Scrapy框架-媒体管道原理学习分析_第3页
python爬虫Scrapy框架-媒体管道原理学习分析_第4页
python爬虫Scrapy框架-媒体管道原理学习分析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论