scrapy持久化存储

基于终端指令的持久化存储

  • 该方法只可以将parser方法的返回值存储到本地指定后缀的文件当中
  • 执行指令 scrapy crawl spiderName -o filePath

基于管道的持久化存储

  • 在爬虫文件当中进行数据解析
  • 在items.py中定义相关属性
    • 步骤一中解析出了几个字段的关键字就在此定义几个属性
  • 在爬虫文件当中将解析到的数据存储封装到Item类型的对象当中
    • 这里需要注意的是格式:item[属性] = 属性值
    • 注意:不能使用 点 的形式调用
  • 将Item类型的对象提交给管道
    • yield item
  • 在管道文件当中,接收爬虫文件提交过来的Item对象,且对其进行任意形式的持久化存储
    • pipelines.py里面封装的process_item()方法是用来接受item对象的,参数item就是接收到的item对象
    • process_item()该方法一次只能就收一个item,该方法会被调用很多次
    • 在持久化存储的时候需要重写父类的两个方法
    fp = None
    def open_spider(self, spider):
    	print('我是open_spider(),我只会在爬虫开始的时候执行一次')
    	self.fp = open('文件路径', 'a+', encoding = 'utf-8')
    def close_spider(self, spider):
    	print('我是close_spider(),我只会在爬虫结束的时候执行一次')
    	self.fp.close()
    
  • 在配置文件中开启管道机制
    • 配置文件当中有一个名为ITEM_PIPELINES的字典,将该字典的注释去掉

基于管道实现数据的备份

  • 将爬取到的数据存储到不同的载体中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy框架提供了多种持久化存储方式,包括输出到文件、存储到数据库等。下面给出几种常见的持久化存储方式及对应的代码: 1. 输出到文件 可以使用Scrapy框架提供的File Pipeline将数据输出到文件中。在settings.py文件中配置如下: ```python # 将数据输出到json文件中 ITEM_PIPELINES = { 'scrapy.pipelines.files.FilesPipeline': 1 } FILES_STORE = '/path/to/your/files/store' ``` 在Spider中定义要输出的Item: ```python class MySpider(scrapy.Spider): name = 'myspider' def parse(self, response): item = MyItem() # 填充Item字段 yield item ``` 2. 存储到数据库 可以使用Scrapy框架提供的Item Pipeline将数据存储到数据库中。在settings.py文件中配置如下: ```python # 存储到MySQL数据库中 ITEM_PIPELINES = { 'myproject.pipelines.MySQLPipeline': 300 } MYSQL_HOST = 'localhost' MYSQL_PORT = 3306 MYSQL_USER = 'root' MYSQL_PASSWORD = 'password' MYSQL_DBNAME = 'mydatabase' ``` 在Pipeline中实现存储逻辑: ```python import pymysql class MySQLPipeline(object): def __init__(self, host, port, user, password, dbname): self.host = host self.port = port self.user = user self.password = password self.dbname = dbname @classmethod def from_crawler(cls, crawler): return cls( host=crawler.settings.get('MYSQL_HOST'), port=crawler.settings.get('MYSQL_PORT'), user=crawler.settings.get('MYSQL_USER'), password=crawler.settings.get('MYSQL_PASSWORD'), dbname=crawler.settings.get('MYSQL_DBNAME') ) def open_spider(self, spider): self.conn = pymysql.connect( host=self.host, port=self.port, user=self.user, password=self.password, db=self.dbname, charset='utf8mb4' ) self.cursor = self.conn.cursor() def close_spider(self, spider): self.conn.close() def process_item(self, item, spider): # 存储逻辑 sql = "INSERT INTO mytable (field1, field2) VALUES (%s, %s)" params = (item['field1'], item['field2']) self.cursor.execute(sql, params) self.conn.commit() return item ``` 以上是两种常见的持久化存储方式,具体实现方式可以根据自己的需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值