scrapy框架中已经为我们专门集成好了高效、便捷的持久化操作功能,我们直接使用即可。
这两个组件配合爬虫文件实现数据持久化
items.py:数据结构模板文件。定义数据属性。
pipelines.py:管道文件。接收数据(items),进行持久化操作。
持久化流程:
1.爬虫文件爬取到数据后,需要将数据封装到items对象中。
2.使用yield关键字将items对象返回,自动提交给pipelines管道进行持久化操作。
3.在管道文件中的process_item方法中接收爬虫文件提交过来的item对象,然后编写持久化存储的代码将item对象中存储的数据进行持久化存储
4.settings.py配置文件中开启管道
爬虫文件(qiushi.py)
import scrapy
from learn_scrapy.items import LearnScrapyItem # 导入items
class QiushiSpider(scrapy.Spider):
name = ‘qiushi‘
# allowed_domains = [‘www.web.com‘]
start_urls = [‘https://www.qiushibaike.com/‘]
def parse(self, response):
li_list = response.xpath(‘//*[@id="content"]/div/div[2]/div/ul/li‘)
for li in li_list:
title = li.xpath(‘./div/a/text()‘)[0].extract()
author = li.xpath(‘./div/div/a/span/text()‘)[0].extract()
item = LearnScrapyItem()
# 将数据封装到items对象中。
item[‘title‘] = title
item[‘author‘] = author
# 使用yield关键字将items对象返回
yield item
数据结构模板文件,定义数据属性(items.py)
import scrapy
class LearnScrapyItem(scrapy.Item):
author = scrapy.Field()
title = scrapy.Field()
管道文件(pipelines.py)
from itemadapter import ItemAdapter
class LearnScrapyPipeline:
def __init__(self):
self.fp = None
"""
下列都是在重写父类方法
"""
#开始爬虫时,执行一次
def open_spider(self, spider):
print(‘start spider‘)
self.fp = open(‘data.txt‘, ‘w‘)
# 在爬虫运行中会频繁调用
def process_item(self, item, spider):
self.fp.write(item[‘author‘] + ‘:‘ + item[‘title‘] + ‘\n‘)
return item
#结束爬虫时,执行一次
def close_spider(self, spider):
self.fp.close()
print(‘spider end‘)
原文:https://www.cnblogs.com/bibicode/p/13385085.html