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;

而且可以 返回多个 item,return item, item2,在某管道中,如果用了 item的key,就自动选择有这个key的item,否则,所有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 itemdef 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 itemdef close_spider(self, spider):self.redis_con.connection_pool.disconnect()

代码解释

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

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

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

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

可选方法:from_crawler,获取配置

mongodb 示例,包含了上述方法

首先执行 from_crawler 获取配置,在 open_spider 中创建数据库连接

四、启动管道

在settings中配置即可

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

存在问题

上面这种方式 会作用于所有爬虫;

我们可以在 管道中 判断 是哪个爬虫,根据 spider 参数,或者 根据 item 中的 key,但这种方法很冗余;

更好的做法是在 spider类 中配置 custom_settings 对象

# 类属性
custom_settings = {'ITEM_PIPELINES':
{'getProxy.pipelines.GetproxyPipeline': 300, }} 

数据库存储

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

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

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

转载于:https://www.cnblogs.com/yanshw/p/10919052.html

Scrapy 教程(十)-管道与数据库相关推荐

  1. 15-爬虫之scrapy框架基于管道实现数据库备份02

    基于管道实现数据备份 将爬取到的数据分别存储到不同的载体 将数据一份存储到本地一份存储到mysql和redis 一个管道类对应一种形式的持久化存储操作,如果将数据存储到不同得载体中就需要使用多个管道类 ...

  2. scrapy教程基础篇

    文章目录 scrapy教程 1.安装 2.简介 3.项目教学 命令行 全局命令 项目命令 创建流程 实战讲解 文件作用 代码实例 `chin.py` `items.py` `pipelines.py` ...

  3. MVC5+EF6 入门完整教程十

    原文:MVC5+EF6 入门完整教程十 本篇是第一阶段的完结篇. 学完这篇后,你应该可以利用MVC进行完整项目的开发了. 本篇主要讲述多表关联数据的更新,以及如何使用原生SQL. 文章提纲 多表关联数 ...

  4. python3 scrapy 教程_Scrapy 教程

    Scrapy 教程¶ 在本教程中,我们假定scrapy已经安装在您的系统上.如果不是这样的话,看 安装指南 . 我们将抓取' quotes.toscrape.com ' _,这是一个列出著名作家名言的 ...

  5. [Qt教程] 第21篇 数据库(一)Qt数据库应用简介

    [Qt教程] 第21篇 数据库(一)Qt数据库应用简介 楼主  发表于 2013-5-13 20:56:39 | 查看: 1403| 回复: 13 Qt数据库应用简介 版权声明 该文章原创于作者yaf ...

  6. 群晖NAS教程(十)、利用Docker安装蚂蚁笔记(leanote)

    为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 群晖NAS教程(十).利用Docker安装蚂蚁笔记(leanote) 蚂蚁笔记是一款特别棒的笔记软件,支持Markdown语法,是程序员必备的软件 ...

  7. PVE系列教程(十九)、ubuntu22.04使用Nginx配置chevereto服务器

    PVE系列教程(十九).ubuntu22.04使用Nginx配置chevereto服务器 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 一.环 ...

  8. Scrapy1.5入门(三)——Scrapy教程

    本文为译文,原文见地址:https://docs.scrapy.org/en/latest/intro/tutorial.html Scrapy教程 在本教程中,我们假设Scrapy已经在你的系统上成 ...

  9. Python学习之Scrapy教程

    介绍: 这是我的Scrapy教程系列的第一篇文章,在这个Scrapy教程中,我将讨论Scrapy,BeautifulSoup的特性,比较它们,并帮助您决定哪个更适合您的项目. 谈论BeautifulS ...

最新文章

  1. Python爬虫常见面试题(二)
  2. php 5.2.17 mysql_Apache 2.2.15 整合php 5.2.17 Mysql-5.5.8
  3. Es6 generator浅入浅出
  4. golang 覆盖写入文件 简介
  5. gbdt xgboost 贼难理解!
  6. 1.6 课程资源-深度学习-Stanford吴恩达教授
  7. Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图
  8. cacti安装和第三方模块的导入
  9. fenby C语言 P20
  10. kk 服务器信息,手机kk服务器设置
  11. CSS 有关Position = absolute (绝对定位 是相对于谁而言)
  12. Python基础(注释/算数运算符/变量类型/拼接字符串)
  13. Ext3 -- Form 实例。 用来migrate file 数据到DB用的
  14. Qt——P12 信号连接信号
  15. 题目264-国王的魔镜
  16. OMNeT 例程 Tictoc9 学习笔记
  17. 常用输出设备——打印机、显示器与显示卡、声音和力反馈
  18. 非线性规划的对偶问题
  19. 将雅虎《心香一脉》每天推荐的文章发到咱邮箱(Java版)
  20. 主播必备超萌代打猫咪,超人气全键盘版资源下载~

热门文章

  1. WordPress 多媒体库添加分类和标签支持
  2. MySQL5.7更改用户名密码
  3. WIN10 下 PHP7 中文乱码的解决办法
  4. 主动型页面性能利器:Page Status
  5. source insight 解决自动缩进 和 TAB键=4个SPACE
  6. [react] react是哪个公司开发的
  7. [vue] ajax、fetch、axios这三都有什么区别?
  8. 前端学习(2836):view和text标签
  9. 前端学习(2343):理解virtaldom和key
  10. “约见”面试官系列之常见面试题之第七十六篇之vue-router中的路由钩子函数基本用法 (建议收藏)