python爬虫Scrapy框架的示例分析
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍python爬虫Scrapy框架的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、媒体管道1.1、媒体管道的特性媒体管道实现了以下特性:避免重新下载最
千家信息网最后更新 2026年11月01日python爬虫Scrapy框架的示例分析
这篇文章主要介绍python爬虫Scrapy框架的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
一、媒体管道
1.1、媒体管道的特性
媒体管道实现了以下特性:
避免重新下载最近下载的媒体
指定存储位置(文件系统目录,Amazon S3 bucket,谷歌云存储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)#图片下载def image_downloaded(self, response, request, info)#图片获取 图片大小的过滤 #缩略图的生成def get_images(self, response, request, info)#转化图片格式def convert_image(self, image, size=None)#生成媒体请求 可重写def get_media_requests(self, item, info) return [Request(x) for x in item.get(self.images_urls_field, [])] #得到图片url 变成请求 发给引擎#此方法获取文件名 进行改写def item_completed(self, results, item, info)#文件路径 def file_path(self, request, response=None, info=None)#缩略图的存储路径def thumb_path(self, request, thumb_id, response=None, info=None):
三、小案例:使用图片管道爬取百度图片
(当然不使用图片管道的话也是可以爬取百度图片的,但这还需要我们去分析网页的代码,还是有点麻烦,使用图片管道就可以省去这个步骤了)
3.1、spider文件
注意:由于需要添加所有的请求头,所以我们要重写start_requests函数
import reimport scrapyfrom ..items import DbimgItemclass DbSpider(scrapy.Spider): name = 'db' # allowed_domains = ['xxx.com'] start_urls = ['https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%8B%97&oq=%E7%8B%97&rsp=-1'] def start_requests(self): #因为需要添加所有的请求头,所以我们要重写start_requests函数 # url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%8B%97&oq=%E7%8B%97&rsp=-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=www.baidu.com; 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": "image.baidu.com", "Referer": "https://image.baidu.com/", "sec-ch-ua": '" Not;A Brand";v="99", "Google Chrome";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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36" } for url in self.start_urls: yield scrapy.Request(url,headers=headers,callback=self.parse,dont_filter=True) def parse(self, response): img_urls = re.findall('"thumbURL":"(.*?)"', response.text) # print(img_urls) item = DbimgItem() item['image_urls'] = img_urls yield item3.2、items文件
import scrapyclass DbimgItem(scrapy.Item): # define the fields for your item here like: # 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:/python test/爬虫/scrapy6/dbimg/imgs'3.4、pipelines文件
import osfrom itemadapter import ItemAdapterfrom scrapy.pipelines.images import ImagesPipelineimport settings"""def item_completed(self, results, item, info): with suppress(KeyError): ItemAdapter(item)[self.images_result_field] = [x for ok, x in results if ok] return item"""class ImgPipe(ImagesPipeline): num=0 #重写此函数修改获取的图片的名字 不然图片名称就是一串数字字母 def item_completed(self, results, item, info): images_path = [x['path'] for ok, x in results if ok] #print('results: ',results) 先查看下results的数据格式,然后才能获取到我们需要的值 for image_path in images_path: os.rename(settings.IMAGES_STORE + "/" + image_path, settings.IMAGES_STORE + "/" + str(self.num) + ".jpg") self.num += 1结果:
以上是"python爬虫Scrapy框架的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
图片
文件
管道
媒体
字段
位置
爬虫
分析
最小
函数
图像
格式
结果
存储
生成
框架
示例
内容
宽度
尺寸
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡网
平安科技 互联网
齐家互联网科技
世界互联网领先科技成果
远拓互联网科技
狮子座互联网科技有限公司
济南和联互联网科技有限公司
阿里互联网科技公司
广州恒生互联网科技有限
互联网校园科技培训
互联网科技有哪些公司
互联网科技研发水平
众安科技工业互联网合作
伍佰万互联网科技怎么赚钱
吉林省码上互联网科技电话
世界互联网科技成果奖
互联网界的黑科技
互联网的科技体现在哪里
互联网科技博主张洲
互联网企业和网络科技有限公司
湖北九亚互联网络科技有限公司
与互联网科技公司
青岛互联网科技公司
开启互联网科技时代小说
欧洲十大科技互联网公司
以后互联网后是啥科技
互联网金融中的现代科技
乌鲁木齐新华智原互联网科技学校
朱啸虎曾投资哪些互联网科技企业
北京天晋互联网科技有限公司