items.py:数据结构模板文件。定义数据属性。

pipelines.py:管道文件。接收数据(items),进行持久化操作。

持久化流程:

1.爬虫文件爬取到数据后,需要将数据封装到items对象中。

2.使用yield关键字将items对象提交给pipelines管道进行持久化操作。

3.在管道文件中的process_item方法中接收爬虫文件提交过来的item对象,然后编写持久化存储的代码将item对象中存储的数据进行持久化存储

4.settings.py配置文件中开启管道

-基于管道持久化存储-编码流程:-数据解析【parse方法】- 在item类中声明相关属性,用于存储解析到的数据【xxx =scrapy.Field()】- 将解析到的数据存储封装到item类型的对象中【item = item文件中的类()】【item['xxx']=xxx】- 将item对象提交给给管道类【yielditem】-item会被管道类中的proce_item方法中的item参数进行接收- process_item方法中编写基于item持久化存储的操作【存储到本地/数据库】-在配置文件【setting】中开启管道-管道细节处理:-管道文件中一个类对应的是什么?-一个类表示的是将解析到的数据存储到某一个具体的平台中-process_item方法中的返回值表示什么含义?- 【returnitem】是将item传递给下一个即将被执行的管道类-open_spider,close_spider- 重写父类的两种方法,爬虫开启,爬虫结束各调用一次

- 将糗事百科首页中的段子和作者数据爬取下来,然后进行持久化存储

- 爬虫文件:qiubaiDemo.py

#-*- coding: utf-8 -*-

importscrapyfrom secondblood.items importSecondbloodItemclassQiubaidemoSpider(scrapy.Spider):

name= 'qiubaiDemo'# allowed_domains= ['www.qiushibaike.com']

start_urls= ['http://www.qiushibaike.com/']defparse(self, response):

odiv= response.xpath('//div[@id="content-left"]/div')for div inodiv:#xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。

author = div.xpath('.//div[@class="author clearfix"]//h2/text()').extract_first()

author= author.strip('\n')#过滤空行

content = div.xpath('.//div[@class="content"]/span/text()').extract_first()

content= content.strip('\n')#过滤空行

#将解析到的数据封装至items对象中

item =SecondbloodItem()

item['author'] =author

item['content'] =contentyield item#提交item到管道文件(pipelines.py)

- items文件:items.py

importscrapyclassSecondbloodItem(scrapy.Item):#define the fields for your item here like:

#name = scrapy.Field()

author = scrapy.Field() #存储作者

content = scrapy.Field() #存储段子内容

- 管道文件:pipelines.py

#-*- coding: utf-8 -*-

#Define your item pipelines here#

#Don't forget to add your pipeline to the ITEM_PIPELINES setting#See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

classSecondbloodPipeline(object):#构造方法

def __init__(self):

self.fp= None #定义一个文件描述符属性

#下列都是在重写父类的方法:

#开始爬虫时,执行一次

defopen_spider(self,spider):print('爬虫开始')

self.fp= open('./data.txt', 'w')#因为该方法会被执行调用多次,所以文件的开启和关闭操作写在了另外两个只会各自执行一次的方法中。

defprocess_item(self, item, spider):#将爬虫程序提交的item进行持久化存储

self.fp.write(item['author'] + ':' + item['content'] + '\n')returnitem#结束爬虫时,执行一次

defclose_spider(self,spider):

self.fp.close()print('爬虫结束')

- 配置文件:settings.py

#开启管道

ITEM_PIPELINES ={'secondblood.pipelines.SecondbloodPipeline': 300, #300表示为优先级,值越小优先级越高

}

2.1 基于mysql的管道存储

小试牛刀案例中,在管道文件里将item对象中的数据值存储到了磁盘中,如果将item数据写入mysql数据库的话,只需要将上述案例中的管道文件修改成如下形式:

- pipelines.py文件

#-*- coding: utf-8 -*-

#Define your item pipelines here#Don't forget to add your pipeline to the ITEM_PIPELINES setting#See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

#导入数据库的类

importpymysqlclassQiubaiproPipelineByMysql(object):

conn= None #mysql的连接对象声明

cursor = None#mysql游标对象声明

defopen_spider(self,spider):print('开始爬虫')#链接数据库

self.conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='123456',db='qiubai')#编写向数据库中存储数据的相关代码

defprocess_item(self, item, spider):#1.链接数据库

#2.执行sql语句

sql = 'insert into qiubai values("%s","%s")'%(item['author'],item['content'])

self.cursor=self.conn.cursor()#执行事务

try:

self.cursor.execute(sql)

self.conn.commit()exceptException as e:print(e)

self.conn.rollback()returnitemdefclose_spider(self,spider):print('爬虫结束')

self.cursor.close()

self.conn.close()

- settings.py

ITEM_PIPELINES ={'qiubaiPro.pipelines.QiubaiproPipelineByMysql': 300,

}

2.2 基于redis的管道存储

第一个案例中,在管道文件里将item对象中的数据值存储到了磁盘中,如果将item数据写入redis数据库的话,只需要将上述案例中的管道文件修改成如下形式:

#-*- coding: utf-8 -*-

#Define your item pipelines here#Don't forget to add your pipeline to the ITEM_PIPELINES setting#See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

importredisclassQiubaiproPipelineByRedis(object):

conn=Nonedefopen_spider(self,spider):print('开始爬虫')#创建链接对象

self.conn = redis.Redis(host='127.0.0.1',port=6379)defprocess_item(self, item, spider):

dict={'author':item['author'],'content':item['content']

}#写入redis中

self.conn.lpush('data', dict)return item

- pipelines.py文件

ITEM_PIPELINES ={'qiubaiPro.pipelines.QiubaiproPipelineByRedis': 300,

}

- 面试题:如果最终需要将爬取到的数据值一份存储到磁盘文件,一份存储到数据库中,则应该如何操作scrapy?

- 答:管道文件中的代码为

#该类为管道类,该类中的process_item方法是用来实现持久化存储操作的。

classDoublekillPipeline(object):defprocess_item(self, item, spider):#持久化操作代码 (方式1:写入磁盘文件)

returnitem#如果想实现另一种形式的持久化操作,则可以再定制一个管道类:

classDoublekillPipeline_db(object):defprocess_item(self, item, spider):#持久化操作代码 (方式1:写入数据库)

return item

在settings.py开启管道操作代码为:

下列结构为字典,字典中的键值表示的是即将被启用执行的管道文件和其执行的优先级。

ITEM_PIPELINES ={'doublekill.pipelines.DoublekillPipeline': 300,'doublekill.pipelines.DoublekillPipeline_db': 200,

}

上述代码中,字典中的两组键值分别表示会执行管道文件中对应的两个管道类中的process_item方法,实现两种不同形式的持久化操作。

python持久层框架_python网络爬虫——scrapy框架持久化存储相关推荐

  1. python 爬虫框架_Python网络爬虫-scrapy框架的使用

    1. Scrapy 1.1 Scrapy框架的安装 Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted .lxml和pyOpenSSL.在不同的平台环境下,它所依赖 ...

  2. python爬虫程序框架的理论是什么_Python网络爬虫(scrapy框架简介和基础应用)

    一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等) ...

  3. python sub 不区分大小写_Python网络爬虫入门篇

    1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. Python入门篇:https://www.cnblo ...

  4. python cookies是什么_Python网络爬虫之Cookie技术(一)

    原标题:Python网络爬虫之Cookie技术(一) 当我们访问一个需要用户名和密码登录的网站(例如某宝)时,只要我们注册好并成功登录后,下次访问该网站时,网站就会记住我们的登录信息,而无需重新登录. ...

  5. python selenium 验证码识别_Python网络爬虫之如何用代码识别图片验证码

    验证码 当我们在爬取某些网站的时候,对于一些频繁请求,网站会识别你是机器还是人.如果是机器,直接不允许你访问这个网站了,直接返回404或者禁止访问. 最常见的方式就是验证码.验证码的主要功能就是区分当 ...

  6. scrapy框架_Python学习之Scrapy框架

    爬虫界江湖地位No.1 说起Python,不得不说到它的爬虫应用,由于Python的短小精悍,用它来开发爬虫应用是最合适不过了,基于Python抓取网页的库有很多,例如requests,beatifu ...

  7. python cookie池_Python爬虫scrapy框架Cookie池(微博Cookie池)的使用

    下载代码Cookie池(这里主要是微博登录,也可以自己配置置其他的站点网址) 下载代码GitHub:https://github.com/Python3WebSpider/CookiesPool 下载 ...

  8. python scrapy爬虫视频_python爬虫scrapy框架的梨视频案例解析

    之前我们使用lxml对梨视频网站中的视频进行了下载 下面我用scrapy框架对梨视频网站中的视频标题和视频页中对视频的描述进行爬取 分析:我们要爬取的内容并不在同一个页面,视频描述内容需要我们点开视频 ...

  9. python网络爬虫资源库名_Python网络爬虫

    网友NO.524767 Python网络爬虫与信息提取(实例讲解) 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.B ...

  10. scrapy获取a标签的连接_Python爬虫 scrapy框架初探及实战!

    Scrapy框架安装 操作环境介绍 操作系统:Ubuntu19.10 Python版本:Python3.7.4 编译器:pycharm社区版 安装scrapy框架(linux系统下) 安装scrapy ...

最新文章

  1. 4种营销场景满足其中一个要不要做小程序?
  2. Mysql while 嵌套 cursor 游标, 数据迁移
  3. 强化学习在美团“猜你喜欢”的实践
  4. python twisted教程 二:缓慢的诗
  5. Unity 碰撞器和触发器的理解
  6. 素材诊断分析助手_资深优化师告诉你广告投放素材都在哪找?(国内篇)
  7. TeamTalk各个服务的IP配置方案
  8. Android studio 如何连接手机
  9. mysql数据库断开连接_mysql 数据库断开连接
  10. 军哥独家QCIE(囊括CCIE和HCIEv3.0)的全新课程。请大家参阅
  11. UnRaid利用iGVT-g插件实现Nas宿主机、虚拟机同时使用intel核显输出或硬解(硬件加速)功能
  12. HSSFCellStyle相关属性报错
  13. 【数据处理】超好用的Excel数据拆分工具
  14. 施炜:华为为什么能成功?
  15. c语言输出字符的十六进制,用c语言输入键盘上的字符后转换成十六进制输出
  16. Spring面试题(一)
  17. Java基础 DAY08
  18. Day01:基础入门-概念名词
  19. (转)it界的大师手笔
  20. [IC笔试题] FIFO深度计算

热门文章

  1. flutter 修改app名字和图标(安卓)
  2. IntelliJ IDEA 2017 汉化包及教程
  3. 微信小程序|基于小程序实现人脸识别对比
  4. Excel制作二维码、条形码?你肯定没见过
  5. 沁恒CH32V307母板+OPA4377运放模块-开源
  6. 如何从Linux里面下载软件
  7. window常用设置和命令
  8. 饿了么移动 APP 的架构演进
  9. 四轴飞控DIY Mark4 - RTH/GPS Rescure
  10. echarts的tooltip提示框