《Python网络爬虫基础教程》 课件-第7章 存储数据_第1页
《Python网络爬虫基础教程》 课件-第7章 存储数据_第2页
《Python网络爬虫基础教程》 课件-第7章 存储数据_第3页
《Python网络爬虫基础教程》 课件-第7章 存储数据_第4页
《Python网络爬虫基础教程》 课件-第7章 存储数据_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章存储数据《Python网络爬虫基础教程》学习目标/Target了解数据存储的两种方式,能够说出文件存储和数据库存储的利弊掌握MongoDB数据库的安装,能够独立安装MongoDB数据库掌握Python操作MongoDB数据库的方式,能够使用pymongo模块操作MongoDB数据库的数据掌握Redis数据库的安装,能够独立安装Redis数据库掌握Python操作Redis的方式,能够使用redis模块操作Redis数据库的数据章节概述/Summary在实际应用中,网络爬虫在对网页的数据进行抓取、解析之后,便可以获得最终要采集的目标数据,然后对这些目录数据进行持久化存储,以便后期投入数据研究工作中。数据存储主要有文件存储和数据库存储两种存储方式。我们在前面的项目开发中已经接触过文件存储。目录/Contents7.17.27.3数据存储的方式存储至MongoDB数据库存储至Redis数据库7.4实践项目:采集小兔鲜儿网的商品信息数据存储方式7.1了解数据存储的两种方式,能够说出文件存储和数据库存储的利弊学习目标7.1数据存储的方式存储数据是实现网络爬虫的最后一个环节,我们在这个环节主要做的事情便是将解析后的数据进行持久化存储,为后期的数据研究工作做好准备、我们可以采用两种方式存储网络爬虫采集的数据:文件存储和数据库存储。7.1数据存储的方式

文件存储文件存储是一种基础的数据存储方式,这种方式会将数据以文件的形式存储到本地电脑中,例如,前面章节中涉及的案例都是采用这种方式存储数据的。对于中小型网络爬虫来说,适合使用文件的形式存储数据。7.1数据存储的方式

数据库存储文件存储方式虽然能够将采集的数据进行存储,但这种方式会将数据存储成一堆零散的文件,这导致数据不仅没有清晰的结构,而且不利于后续在程序中使用。当采集的数据量较大时,可以使用数据库存储。7.1数据存储的方式

数据库存储根据存储数据时所用数据模型的不同,当今互联网中的数据库主要分为两种:关系型数据库和非关系型数据库。关系型数据库是指采用关系模型(二维表格形式)组织数据的数据库系统,它由数据表和数据表之间的关系组成,主要包含数据行、数据列、数据表、数据库4个核心元素。非关系型数据库也被称为NoSQL(NotOnlySQL)数据库,是指非关系型的、分布式的数据存储系统。与关系型数据库相比,非关系型数据库无需事先为要存储的数据建立字段,它没有固定的结构,既可以拥有不同的字段,也可以存储各种格式的数据。7.1数据存储的方式

数据库存储7.1数据存储的方式在实际应用中,文件存储和数据库存储各有利弊,文件存储比较适合中小型网络爬虫,数据库存储比较适合大型网络爬虫,大家可以根据自己的需求进行选择。存储至MongoDB数据库7.2掌握MongoDB数据库的安装,能够独立安装MongoDB数据库学习目标7.2存储至MongoDB数据库

7.2.1下载与安装MongoDBMongoDB属于典型的文档型数据库,它采用文档的形式存储数据,每个文档中包含多个键值对。这类数据库对数据结构要求并不严格,具有结构可变、查询速度快的特点。在使用MongoDB数据库之前,我们需要确保自己的计算机中已经安装了MongoDB数据库。接下来,以Windows7系统为例,分别为大家介绍如何在计算机中下载并安装MongoDB数据库。7.2.1下载与安装MongoDB在浏览器中访问MongoDB社区版的下载页面,该页面中展示支持Windows系统的所有可用版本。单击version选择下载的版本;单击Download下载安装包多线程7.2.1下载与安装MongoDB步骤1步骤2步骤3步骤4安装MongoDB双击下载的MongoDB安装包启动安装程序,进入WelcometotheMongoDB界面。7.2.1下载与安装MongoDB步骤2步骤1步骤3步骤4勾选协议单击WelcometotheMongoDB4.2.15界面中Next按钮,进入End-UserLicenseAgreement界面。7.2.1下载与安装MongoDB步骤3步骤1步骤2步骤4进入ChooseSetupType界面勾选End-UserLicenseAgreement界面中的协议后,单击Next按钮进入ChooseSetupType界面。Complete:此类型将安装所有程序功能,需占用较多的磁盘空间,建议大多数用户使用。Custom:此类型允许用户自行选择要安装的程序功能及安装位置,建议高级用户使用。7.2.1下载与安装MongoDB步骤4步骤1步骤2步骤3进入ServiceConfiguration界面在ChooseSetupType界面中,单击Complete按钮进入ServiceConfiguration界面。data文件夹用于存放创建的数据库log文件夹用于存放数据库的日志文件多线程7.2.1下载与安装MongoDB步骤5步骤6步骤7步骤8进入InstallMongoDBCompass界面单击ServiceConfiguration界面中Next按钮,进入InstallMongoDBCompass界面。7.2.1下载与安装MongoDB步骤6步骤5步骤7步骤8进入ReadytoinstallMongoDB界面取消勾选InstallMongoDBCompass复选框,单击Next按钮进入ReadytoinstallMongoDB4.2.152008R2PlusSSL(64bit)界面。7.2.1下载与安装MongoDB步骤7步骤5步骤6步骤8进入CompletedtheMongoDB4.2.15界面单击ReadytoinstallMongoDB4.2.152008R2PlusSSL(64bit)界面的Install按钮开始安装MongoDB。7.2.1下载与安装MongoDB步骤8步骤5步骤6步骤7完成安装MongoDB默认会将创建的数据库文件存储在db目录下,但是这个目录不会被主动创建,需要用户在MongoDB安装完成后自己创建db文件夹。在“C:\ProgramFiles\MongoDB\Server\4.0\data\”目录下创建一个文件夹db。7.2.1下载与安装MongoDB步骤8步骤5步骤6步骤7完成安装打开命令提示符窗口,使用cd命令切换当前工作路径为MongoDB.exe所在的安装目录(本书安装的路径为“C:\ProgramFiles\MongoDB\Server\4.2\bin”),之后输入如下命令指定MongoDB数据库文件的位置为刚刚新建的db目录。mongod--dbpath"C:\ProgramFiles\MongoDB\Server\4.2\data\db"为了避免后续重复切换至MongoDB.exe的安装目录,可以将以上路径添加到环境变量中。掌握Python操作MongoDB的方式,能够使用pymongo模块操作MongoDB数据库的数据学习目标7.2.2使用Python操作MongoDBPython提供了一个第三方模块pymongo,该模块中定义了连接和操作MongoDB数据库的功能。使用pymongo模块之前,我们需要在当前的Python环境中安装pymongo模块。pipinstallpymongo安装好pymongo模块以后,我们就可以使用pymongo模块操作MongoDB数据库。7.2.2使用Python操作MongoDB

创建连接pymongo模块中,MongoClient类的对象用于建立与MongoDB数据库的连接,它可以通过如下构造方法进行创建。__init__(self,host=None,port=None,document_class=dict,tz_aware=None,connect=None,type_registry=None,**kwargs)host:表示主机地址,默认为localhost。port:表示连接的端口号,默认为27017。document_class:表示数据库执行查询操作后返回文档的类型,默认为dict。7.2.2使用Python操作MongoDB

创建连接使用默认的主机地址和端口号建立与本地MongoDB数据库的连接,示例代码如下。client=MongoClient()显式地指定主机地址和端口号,示例代码如下。client=MongoClient('localhost',27017)使用MongoDB的URL路径形式传入参数,示例代码如下。client=MongoClient('mongodb://localhost:27017')7.2.2使用Python操作MongoDB

访问数据库在pymongo模块中,DataBase对象表示一个数据库。访问数据库的方式比较简单,可以直接使用“连接对象.数据库名称”的方式访问数据库。db=client.database_test#访问数据库database_test此外,还可以使用字典的形式进行访问,示例代码如下。db=client['database_test']值得一提的是,使用以上两种方式访问数据库时,若指定的数据库已经存在,则会直接访问该数据库,否则会重新创建一个数据库。7.2.2使用Python操作MongoDB

创建集合在pymongo模块中,Collection对象代表集合,集合类似于关系数据库中的表,但是它没有固定的结构。创建集合与访问数据库的方式类似,直接通过“数据库名称.集合名称”的形式实现。coll=db.student#创建集合student也可以采用访问字典值的形式创建集合,示例代码如下。coll=db['student']7.2.2使用Python操作MongoDB

插入文档pymongo中提供了两个向集合中插入文档的方法,分别是insert_one()和insert_many()。result=coll.insert_one({'name':'zhaoliu','age':23})insert_many()用于一次向集合中插入多条文档,代码如下。result=coll.insert_many([{'name':'zhangsan','age':20},{'name':'lisi','age':21},{'name':'wangwu','age':22}])insert_one()用于一次向集合中插入一条文档,代码如下。7.2.2使用Python操作MongoDB

查询文档pymongo中提供了两个查询文档的方法,分别是find_one()和find()方法。result=coll.find({'age':20})可以使用for循环遍历查找的结果。fordocinresult:print(doc)find_one()方法用于查询集合中的一条文档,若找到匹配的文档,返回单个文档,代码如下。7.2.2使用Python操作MongoDB

更新文档pymongo中提供了两个更新文档的方法,分别是update_one()和update_many(),其中update_one()方法用于更新集合中的一条文档,update_many()方法用于更新集合中的多条文档。coll.update_one({'name':'zhaoliu'},{'$set':{'age':25}})result_update=coll.find({'name':'zhaoliu'})fordocinresult_update:print(doc)使用update_one()方法更新集合中的一条文档,代码如下。7.2.2使用Python操作MongoDB

删除文档pymongo中提供了两个删除文档的方法,分别是delete_one()和delete_many(),其中delete_one()用于从集合中删除一条文档,delete_many()方法用于从集合中删除多条文档。coll.delete_many({})#删除集合中的所有文档result_find=coll.find({'name':'zhaoliu'})#查找name为'zhaoliu'的文档fordocinresult_find:print(doc)使用delete_many()方法删除coll中的所有文档,并查找name为zhaoliu的文档,示例代码如下。7.2.2使用Python操作MongoDB存储至Redis数据库7.3Redis属于典型的键值类型的数据库,它采用键值对的形式存储数据到内存中,具有容易部署、查询速度快、支持高并发操作等特点。由于Redis数据库会将数据存储到内存中,所以它读写数据的效率非常高,但不适合存储大量的数据,经常被应用到分布式网络爬虫的场景中。7.3存储至Redis数据库

掌握Redis数据库的安装,能够独立安装Redis数据库学习目标7.3.1下载与安装Redis在使用Redis数据库之前,我们需要确保自己的计算机中已经安装了Redis数据库。GitHub网站上还是提供了Windows平台使用的版本。7.3.1下载与安装Redis

下载Redis在浏览器中访问GitHub网站上Redis数据库的下载页面,当前页面中显示了所有可以被用户下载的多个版本,本书要安装的版本是3.2.100。7.3.1下载与安装Redis

安装Redis7.3.1下载与安装Redis步骤1步骤2步骤3步骤4访问Redis下载页双击安装文件启动安装程序,进入WelcometotheRedisonWindowsSetupWizard界面。

安装Redis7.3.1下载与安装Redis步骤2步骤1步骤3步骤4勾选协议单击WelcometotheRedisonWindowsSetupWizard界面的Next按钮进入End-UserLicenseAgreement界面。

安装Redis7.3.1下载与安装Redis步骤3步骤1步骤2步骤4添加到环境变量勾选IacceptthetermsintheLicenseAgreement复选框,单击“Next”按钮进入DestinationFolder界面。

安装Redis7.3.1下载与安装Redis步骤4步骤1步骤2步骤3添加防火墙提醒单击“Next”按钮进入PortNumberandFirewallException界面。

安装Redis7.3.1下载与安装Redis步骤5步骤6设置最大内存单击PortNumberandFirewallException界面中Next按钮进入MemoryLimit界面,该界面中可设置最大内存。

安装Redis7.3.1下载与安装Redis步骤5步骤6完成安装单击MemoryLimit界面Next按钮进入准备安装的界面,在该界面中单击Finish按钮完成安装。掌握Python操作Redis的方式,能够使用redis模块操作Redis数据库的数据学习目标7.3.2使用Python操作RedisPython提供了一个第三方模块redis,该模块中定义了连接和操作Redis数据库的功能。使用redis模块之前,我们需要在当前的Python环境中安装redis模块。pipinstallredis安装好redis模块以后,我们就可以使用redis模块操作Redis数据库了。7.3.2使用Python操作RedisRedis数据库中,数据都是以键值对的形式进行存储的,其中键必须为字符串类型,值可以为字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(zset)这五5种类型。7.3.2使用Python操作Redis

创建连接redis模块中,StrictRedis类的对象用于建立与Redis数据库的连接。StrictRedis(host='localhost',port=6379,db=0,password=None,socket_timeout=None,socket_connect_timeout=None,socket_keepalive=None,socket_keepalive_options=None,connection_pool=None,unix_socket_path=None,encoding='utf-8',decode_responses=False,...)host:表示待连接的Redis数据库所在主机的IP地址,默认设为localhost。port:表示Redis数据库程序的端口,默认值为6379。db:表示数据库索引,默认值为0,最大值为15,对应数据库的名称为db0和db15。encoding:表示采用的编码格式,默认值为utf-8。decode_responses:表示是否对返回的结果进行解码,默认值为False。7.3.2使用Python操作Redis

创建连接使用默认IP地址和端口号创建StrictRedis类的对象,建立与本地Redis数据库的连接,具体代码如下。importredissr_obj=redis.StrictRedis()7.3.2使用Python操作Redis

增加键值对增加键值对的常用方法有两个:set()和append()。set()方法用于根据指定的键设置值,若指定的键不存在,则会新建一个键值对,否则会修改该键对应的值。set()方法会返回一个布尔值,若返回的值为True,则表示键值对创建或修改成功,否则表示创建或修改失败。append()方法用于为指定的键追加值,若指定的键存在,则新值会追加到原值的末尾,否则会创建一个新的键值对。7.3.2使用Python操作Redis

增加键值对使用set()方法向默认的数据库db0中增加键值对,具体代码如下。#增加键值对result=sr_obj.set('py1','Tom')print(result)7.3.2使用Python操作Redis

查询键值对get()方法用于根据指定的键查询该键对应的值,查询失败则会返回None。例如,使用get()方法查询刚刚添加的键值对。#查询键为py1的值result=sr_obj.get('py1')print(result)7.3.2使用Python操作Redis

修改键值对使用set()方法可以对Redis数据库已经存在的键值对进行修改。例如,使用set()方法将键py1对应的值修改为Jerry,并再次查询修改后的键值对。#修改键py1对应的值result=sr_obj.set('py1','Jerry')print(result)result=sr_obj.get('py1')print(result)7.3.2使用Python操作Redis

删除键值对delete()方法会根据指定键删除其对应的值,并根据该方法返回的结果判定是否删除成功。若返回的结果为受影响键的数量,则表示删除成功;若返回的结果为0,则表示删除失败。#删除键py1的值result=sr_obj.delete('py1')print(result)7.3.2使用Python操作Redis熟悉Redis桌面管理工具的使用,能够通过RedisDesktopManager查看Redis中数据学习目标7.3.3Redis桌面管理工具为了能直观地看到Redis数据库中数据的变化情况,这里推荐一个Redis数据库的桌面管理工具——RedisDesktopManager,它为Windows、macOS等平台都提供了快速的支持,操作简单且使用方便。7.3.3Redis桌面管理工具下面以Windows7系统为例,介绍如何安装与使用RedisDesktopManager2019.4.0工具。7.3.3Redis桌面管理工具7.3.3Redis桌面管理工具步骤1步骤2步骤3步骤4进入RedisDesktopManager的主界面打开RedisDesktopManager安装包,按照安装向导的提示逐步进行安装,安装完成后进入RedisDesktopManager的主界面。7.3.3Redis桌面管理工具步骤2步骤1步骤3步骤4创建连接单击“连接到Redis服务器”按钮,选择创建一个Redis连接,在弹出的对话框中,填写新创建连接的名称、Redis数据库的主机IP地址,并使用默认的端口6379。7.3.3Redis桌面管理工具步骤3步骤1步骤2步骤4启动的Redis服务命令的控制台在Redis-Windows7的上方右击选择“Console”,可以在界面右下方看到启动的Redis服务命令的控制台。7.3.3Redis桌面管理工具步骤4步骤1步骤2步骤3在控制台中执行set/get命令先使用set命令设置一个键为hello值为world的键值对,再使用get命令查询键hello对应的值。7.3.3Redis桌面管理工具步骤5RedisDesktopManager中查看数据设置完成后,在Redis-Windows7节点上右击选择“Reload”进行刷新,刷新后可以看到数据库db0中多了一条数据。实践项目:采集小兔鲜儿网的商品信息7.4掌握小兔鲜儿网站数据的抓取,能够将采集的数据保存到MongoDB中学习目标7.4采集小兔鲜儿网的商品信息小兔鲜儿网是一款由传智播客前端开发工程师打造的电商类的项目,它模仿其他商品交易平台的版块,汇聚了居家、美食、服饰、母婴、个护、严选、数码、运动等几个分类的商品。实践此项目旨在让读者体验到真实项目的开发过程。在本节中,我们将运用前面所学的知识开发一个完整的网络爬虫项目,用于采集小兔鲜儿网上车载用品分类下所有的商品信息,并将这些商品信息保存到MongoDB数据库中。

项目需求7.4采集小兔鲜儿网的商品信息在浏览器中访问小兔鲜儿网的首页(该页面中默认显示了多个版块)单击菜单栏中的“数码”选项进入数码分类的页面,在该页面中可以看到影音娱乐、乐器、车载用品、办公文具4个子分类,单击任意一个子分类就会进入该子分类对应的页面。例如,单击子分类“车载用品”进入车载用品类的商品页面。

项目目标7.4采集小兔鲜儿网的商品信息单击任意一个商品进入该商品的详情页面。

项目目标7.4采集小兔鲜儿网的商品信息拖住竖向滚动条向下翻查,可以在商品详情页面中看到猫抓板的商品详情版块。

项目目标商品名称、商品描述、商品链接、商品价格、商品图片、商品详情为抓取的数据7.4采集小兔鲜儿网的商品信息在了解了项目目标之后,我们已经知道了从网页源代码中要提取哪些数据。下面从抓取网页和解析网页两个方面对网页进行分析。

项目分析7.4采集小兔鲜儿网的商品信息抓取网页分析

项目分析在浏览器中访问车载用品类页面,滚动至页面底部查看完展示的部分商品后继续滚动,可以看到该页面底部又展示了一部分商品。此时查看当前页面的源代码,可以看到源代码中搜索不到有关任何商品的数据,之所以出现这种情况是因为所有商品数据都是通过AJAX技术动态加载的,因此我们对加载数据时发送的请求进行分析。7.4采集小兔鲜儿网的商品信息抓取网页分析

项目分析打开浏览器的开发者窗口,在该窗口顶部的菜单栏中切换至Network选项,并将页面请求的筛选条件设为XHR,说明只展示通过AJAX技术动态加载数据时发送的请求。7.4采集小兔鲜儿网的商品信息抓取网页分析

项目分析单击标注的temporary,窗口右侧弹出查看该请求的详细信息的界面。在该界面的上方选中Preview选项,采用预览模式展示当前请求发送后返回的响应信息。7.4采集小兔鲜儿网的商品信息抓取网页分析

项目分析展开result,可以看到result下的所有内容。result对应的值是一个JSON对象,该对象中包含了多个键值对,其中counts:337代表车载用品类页面中总共有337个商品;pages:1代表当前展示的是第1页商品信息;pageSize:20代表每页至多展示20个商品;pages:17代表总共有17页。另外,items的值是一个JSON数组。7.4采集小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论