Scrapy 持久化

Scrapy持久化

方式一(了解):

1 parser解析函数,return 列表,列表套字典
2 命令行持久化到文件中:scrapy crawl chouti -o aa.json   (支持:('json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle')

方式二:piplines的方式(重点)

1、在items.py中创建模型类

import scrapy

# 写一个模型类,用来存储解析出来的数据
class CrawlChoutiItem(scrapy.Item):
    id=scrapy.Field()
    title = scrapy.Field()
    url = scrapy.Field()
    img_url = scrapy.Field()

2、在爬虫中chouti.py文件中导入,把解析的数据放到item对象中(记得要用中括号)

item=CrawlChoutiItem()  # 实例除一个item对象
# #这种方式不行,必须使用中括号方式
# # item.title=title   报错
item['id']=id  #填写配置的参数
item['title']=title
item['url']=url
item['img_url']=img_url

3、在配置文件中配置管道

       ITEM_PIPELINES = {
        # 数字表示优先级(数字越小,优先级越大)
       'crawl_chouti.pipelines.CrawlChoutiPipeline': 400,
       'crawl_chouti.pipelines.CrawlChoutiRedisPipeline': 301,
        }

4、在piplines.py中写持久化类

from redis import Redis

class CrawlChoutiPipeline(object):
    def process_item(self, item, spider):
        pass

class CrawlRedisPipeline(object):
    # 存redis数据库

    def open_spider(self,spider):
        print('redis开始')
        self.conn = Redis(db=6,password='Admin123')
    def process_item(self,item,spider):
        import json
        s = json.dumps({'title':item['title'],'usrl':item['url'], 'img_url':item['img_url']})
        self.conn.hset('chouti_article',item['id'],s)
        print('redis')
        return item  # 写return表示按优先级继续往下走
    def close_spider(self,spider):
        print('redis结束')
        self.conn.close()

猜你喜欢

转载自www.cnblogs.com/baohanblog/p/12677377.html