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()