爬虫知识8:数据存储的需求实现,Item、Pipeline介绍

   scrapy提取的信息可以保存在文件(csv、txt、json)中,或者数据库中。而scrapy中的Pipeline则是专门用来保存数据的模块。

    以下以爬取豆瓣TOP250电影为例,分别介绍4种不同的数据保存和展示方式。且在案例3和案例4分别介绍了item和pipelines的知识

  • 案例1:不保存到文件,只在屏幕打印出来。直接用print语句即可。

  • 案例2:保存到文件,但不使用items返回数据,初级保存

  • 案例3:保存到文件,使用items返回数据。但无法对保存的数据进行修改。

  • 案例4:保存到文件,同时使用item和pipeline,可以实现对数据处理后再保存。

案例1、不保存到文件,只在屏幕打印出来。直接用print语句即可。

则如下爬虫程序可满足:

运行runspider.py文件,即可得到所有的电影名称和网址。

案例2:保存到文件,不使用items返回数据,也不对文件做任何处理。也即仅在spider中实现初级保存。

以下爬虫程序即可满足:新增语句在画对勾的地方。主要是打开和写入文件语句。

案例3:保存到文件,使用items返回数据。但无法对保存的数据进行修改。

运行方式:返回数据后直接在命令行写保存的文件

3-1关于items介绍

    爬虫的目的是为了从非结构性的数据源提供结构性数据,蜘蛛中的parse,解析出来url、title、time、content等数据,但是如何将这些数据包装成结构化的数据呢?scrapy提供了item类来满足这样的需求。Item对象是一种简单的容器,荣来保存爬取到的数据,提供了类似于字典的API以及用于声明可用字段的简单语法。

关于item的一些知识:

  • item:保存提取的数据,类似于字典的形式。

  • item的结构定义:   使用简单的class定义语法以及Field对象来生命。

  • Field可以指向任意类型的字段;

  • Item赋值:item['title']="xxxx",其中的title可以为任意的名字

  • Spider中使用yield 处理item对象:需要再parse中导入

  • 支持的存储格式为csv、json、xml

如果在命令行直接输入,语句分别为:

  • Json格式:scrapy crawl 爬虫名称 -t json -o 文件名称.json,如果需要转码则可写成:scrapy crawl 爬虫名称 -t json -o 文件名称.json -s FEED_EXPORT_ENCODING='utf-8'

  • csv格式:scrapy crawl 爬虫名称 -t csv -o 文件名称.csv

  • TXT格式:scrapy crawl 爬虫名称 -t txt -o 文件名称.txt

存储的问题:

  • FEED_URL:存储路径

  • FEED_FORMAT:存储格式

  • FEED_EXPORT_ENCODING:存储编码

  • FEED_EXPORT_FIELDS:存储字段

3-2 程序的实现

这个程序需要对3个py文件做修改:爬虫程序.py、items.py、运行爬虫的程序.py

1)自己写的爬虫程序spider_ex1.py如下:

2) items.py的程序如下:

3)运行爬虫的程序,新建一个runspider.py文件,程序如下。使用这个程序就可以直接在pycharm中运行程序了,不需要切换到命令栏再运行爬虫了。

如果要保存其他格式,则参考语法改成txt、或者json对应的语句。

如果是json,需要转码,可使用以下语句

运行runspider.py文件,即可得到想要结果。

案例4::保存到文件,同时使用item和pipeline,可以实现数据处理后再保存。

4-1 关于pipeline介绍

    当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。主要任务是清洗、验证和存储数据。每个Item Pipeline都是实现了简单方法的Python类,因此我们也可以编写自己的Item Pipeline。以下是item pipeline的一些典型应用:

  • 清理HTML数据

  • 验证解析到的数据(检查Item是否包含必要的字段)

  • 检查是否是重复数据(如果重复就删除)

  • 将解析到的数据存储到数据库或文件

 

可以在Pipeline.py类的以下方法中自定义功能:

  • open_spider:spider打开时调用,比如打开存储文件的动作放在这里

  • close_spider:spider结束时调用,比如关闭存储文件的动作放在这里

  • process_item:会对每一个item进行处理,且必须返回一个item对象实例或raise DropItem异常。如果是丢弃item,则被丢掉的item将不会在管道组件进行执行。

  • from_crawler:创建一个pipeline实例,可以访问settings.py中自定义的变量。比如获取文件路径的变量path=crawler.settings.getint('PATH')。settings中的变量必须大写

  • _init_方法:封装参数。

丢弃item的方法:

    如果不丢弃,则使用语句“return item”,如果需要丢弃,则先导入模块“from scrapy.exceptions import DropItem”,再使用语句“raise DropItem()”

如果想将pipeline单独应用于一个蜘蛛,可通过此语句

if spider.name=='test'

Pipeline设置:

在settings.py文件中,找到字典“ITEM_PIPELINES”,激活如下:

可以添加多个PIPELINES,谁的序号小先执行谁。

4-2爬虫的程序实现

这个程序执行对应的5个py文件:爬虫程序.py、items.py、settings.py、pipelines.py、运行爬虫的程序.py

1)爬虫程序.py,和案例3相同,只需要有item即可

2)items.py的程序如下,和案例3一样,需要用items都要这样设置

3)pipelines.py程序,因为要实现同时保存到text文件和json文件中,要写两个pipeline文件。当然也可以写更多的。

  • 第一个直接在pipline中写路径

  • 第二个pipeline使用settings.py中自定义的参数获取路径

4)settings.py,需要把ITEM_PIPELINES激活,对应的写上两个pipelines。序号小的优先执行。

自定义的路径参数:

5)运行爬虫的程序,新建一个runspider.py文件,程序如下。使用这个程序就可以直接在pycharm中运行程序了,不需要切换到命令栏再运行爬虫了。

运行runspider.py文件,即可得到想要结果。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值