Scrapy 教程(十)-管道与数据库

时间:2019-05-24 17:48:22   收藏:0   阅读:171

Scrapy 框架将爬取的数据通过管道进行处理,即 pipelines.py 文件。

 

管道处理流程

一、定义 item

item 表示的是数据结构,定义了数据包括哪些字段

class TianqiItem(scrapy.Item):
    # define the fields for your item here like:

    city = scrapy.Field()           # 城市
    date = scrapy.Field()           # 日期
    hour = scrapy.Field()           # 小时
    day = scrapy.Field()            # 白天

写法比较固定,不可随意更改;注意没有return

 

二、在爬虫中生成 item

爬虫组件必须将数据按 item 的结构进行组织

item[city] = response.xpath(//a[@id="lastBread"]//text()).extract_first()[:-4]
item[date] = %s-%s-%s%(year, month, day)
item[hour] = hour

注意最终必须  return item

 

三、在管道中处理

1. 爬虫生成的 item 自动进入管道;

2. 管道会判断 流入的数据 的类型 是否是 item;【即 item.py 中定义的类型】

3. 如果是 item 类型,进行后续处理,否则,忽略;

4. 返回 item,【必须返回,切记】【返回的 item 流入下一个管道,或者告诉引擎,处理完毕,否则引擎会阻塞】

5. 爬取下一个

class TianqiPipeline(object):
    def __init__(self):
        self.f = open(save.txt, ab)

    def process_item(self, item, spider):
        print(item)
        self.f.write(str(dict(item)))
        return item

    def close_spider(self, spider):
        self.f.close()


class RedisPipeline(object):
    def open_spider(self, spider):
        host = spider.settings.get(REDIS_HOST, localhost)
        port = spider.settings.get(REDIS_PORT, 6379)
        db = spider.settings.get(REDIS_DB_INDEX, 0)

        self.redis_con = redis.StrictRedis(host=host, port=port, db=db)

    def process_item(self, item, spider):
        self.redis_con.hmset(%s:%s:%s%(item[city], item[date], item[hour]), dict(item))
        return item

    def close_spider(self, spider):
        self.redis_con.connection_pool.disconnect()

代码解释

必选方法:process_item,负责处理数据

可选方法:初始化,只在爬虫启动时进行初始化

可选方法:open_spider,在开始爬取数据之前被调用

可选方法:close_spider,爬取完数据后被调用

 

四、启动管道

在settings中配置即可

ITEM_PIPELINES = {
   tianqi.pipelines.TianqiPipeline: 300,
   tianqi.pipelines.RedisPipeline: 301,
}

 

数据库存储

管道可以实现任何形式的存储,包括文件、数据库等;

而且可以存入各种数据库,如 sqlite、mysql、mongoDB、redis;

上面的例子实现了 redis 的存储,其他大同小异,以后有机会再更新。

原文:https://www.cnblogs.com/yanshw/p/10919052.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!