龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > Python > scrapy内置图片和文件下载

scrapy内置图片和文件下载

龙行    Python    2019-9-6    60    0评论    本文已被百度收录点击查看详情

前面的文章写过一个图片下载,打宝石看到了更好的那肯定要记录下

item Pipeline提供了一些可以重用的Pipeline,其中有filesPipeline和imagesPipeline,他们都实现了以下特性:

  • 避免重新下载最近已经下载过的数据

  • 指定存储的位置和方式

此外,imagesPipeline还提供了二位的特性:

  • 将所有下载的图片转换成通用的格式(jpg)和模式(rgb)

  • 粗略图生成

  • 检测图像的宽/高,确保他们满足最小限制

使用FIlesPipeline方法如下:
1)在setting.py的ITEM_PIPELINES中添加一条'scrapy.pipelines.files.FilesPipeline':1
2)在item中添加两个字段,比如:
file_urls = scrapy.Field()
files = scrapy.Field()
3)在setting.py文件中添加下载路径,文件url所在的item字段,和文件结果信息所在item字段,比如:
FILES_STORE = '/HOME/XXX/SPIDER'
FILES_URLS_FIELD ='file_urls'
FILES_RESULT_FIELD = 'files'
使用files_expires设置文件过期时间,示例如下:
FILES_EXPIRES = 30 #30天过期

使用ImagesPIpeline方法如下:
1)在setting.py的ITEM_PIPELINES中添加一条'scrapy.pipelines.images.ImagesPipeline':1
2)在item中添加两个字段,比如:
image_urls = scrapy.Field()
images = scrapy.Field()
3 )在setting.py文件中添加下载路径,文件url所在的item字段,和文件结果信息所在item字段,比如:
IMAGES_STORE = '/HOME/XXX/SPIDER'
IMAGES_URLS_FIELD ='file_urls'
IMAGES_RESULT_FIELD = 'files'
除此之外,使用IMAGES_THUMS制作缩略图,并这是缩略图尺寸大小,并使用IMAGES_EXPIRES设置文件过期时间,示例如下:
IMAGES_THUMBS = {
'small':(50, 50),
'big': (270,270),
}
IMAGES_EXPIRES = 30 #30天过期

除此之外,Item Pipeline还有三个方法非常常用

  • open_spider(self, spider)
    当spider被开启时,这个方法被调用

  • close_spider(self, spider)
    当spider被关闭是,这个方法被调用

  • from_crawler(cls, crawler)
    这个类方法从Crawles属性中创建一个pipeline实例,Crawle对象能够接触所有Scrapy的核心组件,比如setting

以下是一个存储到MongoDB的示例代码:

import pymongoclass ZhihuspiderPipeline(object):

    def __init__(self, mongo_url, mongo_db):
        self.mongo_url = mongo_url
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_url=crawler.settings.get('MONGO_URL'),
            mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
        )

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_url)
        self.db = self.client[self.mongo_db]

    def close_spider(self, spider):
        self.client.close()
    
    def process_item(self, item, spider):
        self.db.UserInfo.insert(dict(item))
        return item

代码中首先通过from_crawler方法,获取setting中的MongoDB的URL和数据库名称,从而创建一个MongoPIpeline实例,在SPider开始运行是,在open_spider方法中建立数据库连接,当Spider关闭是,在close_spider方法中关闭数据库连接。
当是,这里配置的Pipeline会作用于所有的Spider,假如项目中有很多Spider在运行,处理起来就会很麻烦。所以通过process_item(self,item,spider)中的SPider参数判断是来自于哪个爬虫,不过还有更好的方法:
就是配置SPider类中的suctom_settings对象,为每一个Spider配置不同的pipeline

class MySpider(CrawlSpider):
    custom_settings = {
        'ITEM_PIPELINES':{
            'test.pipelines.TestPipeline.TestPipeline':1,
        }
    }


评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/302.html
  • 上篇文章:scrapy请求与响应
  • 下篇文章:python:cookie转字典
  • python3 scrapy
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
快捷导航
联系博主
在线壁纸
给我留言
光羽影视
音乐欣赏
返回顶部