python爬虫Scrapy框架的示例分析
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要介绍python爬虫Scrapy框架的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、媒体管道1.1、媒体管道的特性媒体管道实现了以下特性:避免重新下载最
千家信息网最后更新 2025年01月16日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 item
3.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安全错误
数据库的锁怎样保障安全
数据库审计公司
音视频编码软件开发
服务器跨网
上海机构养老软件开发系统
多层数据库技术
网络安全宣传周时间是9月第几周
网络安全供应商安全职责
用sql语句查看数据库信息
短视频的软件开发公司
自考电子商务网络技术
大连代理服务器
湖南邵赢网络技术有限公司
原神兑换码是所有服务器通用吗
企业网络安全规划设计总结
内蒙古网络软件开发诚信服务
网络安全教育作品宣传册
中国海关贸易数据库ccts下载
数据库中余数函数的格式
网友如何议论网络安全法
电力监控网络安全应急演练
带数据库的网页用什么软件好
上古世纪哪个服务器人多
艺云服务器一年多少钱
力控数据库success
软件开发工程师简笔画简单
关于网络安全问责机制
隐藏网络安全性选什么
数据库sql2005安装
软件开发能不能考二级建造师
网络安全法 权威解读