大数据爬虫技术 课件 项目3、4 爬虫与数据存储、Scrapy框架_第1页
大数据爬虫技术 课件 项目3、4 爬虫与数据存储、Scrapy框架_第2页
大数据爬虫技术 课件 项目3、4 爬虫与数据存储、Scrapy框架_第3页
大数据爬虫技术 课件 项目3、4 爬虫与数据存储、Scrapy框架_第4页
大数据爬虫技术 课件 项目3、4 爬虫与数据存储、Scrapy框架_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

项目三

爬虫与数据存储通过对本章的学习,了解文件格式,掌握MySQL数据库,了解Redis数据库与OrientDB数据库,理解SQL语言,熟悉MySQL数据库操作。了解文件格式。掌握MySQL数据库。了解Redis数据库与OrientDB数据库。理解SQL语言。熟悉MySQL数据库操作文件格式是指在计算机中为了存储信息而使用的对信息的特殊编码方式,用于识别内部储存的资料,如文本文件、视频文件、图像文件等。对应不同的文件类型需要使用不同的编辑方式。例如,使用Excel电子表格来打开MicrosoftExcel文件,使用Photoshop来打开数码相机拍摄的照片,使用MicrosoftOfficePowerPoint打开PPT演示文稿等。3.1文件格式

[例3-1]使用Python读取文本内容。2.运行Python3,命名为“1.py”,书写以下代码。withopen('1.txt')asfile_object:contents=file_object.read()print(contents)语句open()表示接受一个参数,用于读取要打开的文件的名称;语句read()表示要读取文件的全部内容;语句print(contents)表示将该文本的内容全部显示出来。在Windows系统中,可以通过运行Python来显示记事本中的文档内容。其中在Python中的内置函数open()运行模式如表3-1所示。模式说明r读取模式(默认模式),如果文件不存在则抛出异常w写模式,如果文件存在则先清空原有内容x写模式,创建新文件,如果文件已存在则抛出异常a追加模式,不覆盖原有内容b二进制模式t文本模式+读、写模式[例3-2]使用Python往文本内容中输入数据。代码如下:withopen('2.txt','w')asfile_object:contents=file_object.write('从敦煌壁画里的飞天,到嫦娥奔月、玉兔捣药、吴刚伐桂的神话故事,38万公里外的那一轮明月是中华民族数千年来魂牵梦绕的所在。'+'\n'+'我们有梦想,但我们不耽于幻想。从嫦娥一号到嫦娥二号,再到嫦娥三号、再入返回飞行试验、嫦娥四号、嫦娥五号,一步一个脚印去追逐梦想,奔月的故事变成现实。'+'\n'+'2020年12月17日凌晨,历经23天的太空之旅,嫦娥五号返回器携带月球土壤样品在内蒙古四子王旗着陆场安全着陆。这是时隔44年后人类再次采回月球样品,也意味着我国探月工程“绕、落、回”三步走规划的收官之战取得圆满成功。')print(contents)调用open()时提供了两个实参,第一个实参是要打开文件的名称;第二个实参('w')表示以写入模式打开这个文件。写入文件不存在时,函数open()将自动创建;但若指定文件已经存在,Python将在返回文件对象前清空该文件,即新的写入内容会覆盖旧的。运行该例程序之后会在程序文件所在目录发现新增了一个名为2.txt的文件[例3-3]使用JSON存储数据。代码如下:importjson#存储用户的名字username=input('Whatisyourname?')filename='username.json'withopen(filename,'w')asf_obj:json.dump(username,f_obj)#存储用户名与username.json文件中print("We'llrememberyouwhenyoucomeback,"+username+"!")#向名字被存储的用户发出问候withopen(filename)asf_obj:un=json.load(f_obj)print("\nWelcomeback,"+un+"!")

很多程序都要求用户输入某种信息,程序把用户提供的信息存储在列表和字典等数据结构中。用户关闭程序时,就要保存提供的信息,一种简单的方式就是使用模块JSON来存储数据。[例3-4]使用Python生成CSV文件。代码如下:importcsvwithopen('1.csv','w')asf:writer=csv.writer(f)#写入表头,表头是单行数据writer.writerow(['name','age','sex'])data=[('owen','22','male'),('lacks','23','female'),('rose','24','female')]#写入这些多行数据writer.writerows(data)[例3-5]使用Python读取CSV文件。代码如下:importcsvwithopen("1.csv","r")ascsvfile:reader=csv.reader(csvfile)#这里不需要readlinesforlineinreader:print(line)

该例使用Python读取了之前生成的1.csv文件,代码中csvfile必须是支持迭代(Iterator)的对象,可以是文件(file)对象或者列表(list)对象。用户可登陆MySQL的官网,点击DOWNLOADS按钮,进入下载页面中,下载对应操作系统的版本,本书中下载的MySQL版本是MySql5,目前常用的MySQL版本还包括MySQL8。本项目MySQL操作可在MySql5和MySQL8完成,代码是同样的。3.2MySQL数据库

在本地计算机上安装好MySql后,在Windows命令行中输入:netstartmysql即可启动该程序。要进入MySql可执行程序目录,可输入命令:mysql-uroot即可进入MySql中的命令行模式[例3-6]查看数据库。想要查看

MySql数据库,只需输入命令:showdatabases,系统会自动列出已经创建好的所有数据库名称[例3-7]创建数据库。用户可以自行在MySql中创建数据库,只需输入命令:createdatabase即可,其中语句database表示要创建的数据库的名称,用户可自行命名。例如输入命令:createdatabasestu,表示创建了一个数据库,该数据库的名称为stu。创建好数据库后,可使用语句showdatabases查看结果输入命令:usestu即可进入已创建好的stu数据库[例3-8]在数据库中创建数据表。在MySql数据库中创建数据表可以使用命令createtable来完成,其中语句table后要紧跟创建的数据表的名称。例如,在数据库stu中要创建学生信息表user,命令如下:createtableuser(idchar(6)notnullprimarykey,namechar(6)notnull,scoretinyint(1)null);在MySql数据库中,想要查看已经创建好了的数据表,可以使用命令showtables来实现。例如,要查看stu数据表,输入命令:showtables如果想查看该数据表的结构信息,可使用命令:describeuser来进一步了解user表的字段及数据类型MySQL的常见命令(1)创建一个名称为mydb1的数据库,代码如下:createdatabasemydb1;(2)查看所有数据库,代码如下:showdatabases;(3)创建一个使用utf-8字符集的mydb2数据库,代码如下:createdatabasemydb2charactersetutf8;(4)创建一个使用utf-8字符集,并带校对规则的mydb3数据库,代码如下:createdatabasemydb3charactersetutf8collateutf8_general_ci;(5)显示库的创建信息,代码如下:showcreatedatabasemydb3;(6)删除前面创建的mydb1数据库,代码如下:dropdatabasemydb1;Redis是完全开源免费的,使用ANSIC语言编写的,遵守BSD协议的一个高性能的Key-Value数据库,也是当前最热门的NoSQL数据库之一。Redis的性能十分优越,可以支持每秒十几万的读/写操作,并且支持集群、分布式、主从同步等配置,还支持一定事务能力。3.3Redis数据库

进入Github下载地址:/MicrosoftArchive/redis/releases,下载“Redis-x64-3.2.100”到本地计算机中并解压,路径为D:\Redis-x64-3.2.100(1)打开cmd指令窗口,进入到解压的Redis文件路径,并输入命令:redis-serverredis.windows.conf部署Redis为windows下的服务。首先关掉上一个窗口,再重新打开一个新的cmd命令窗口,然后输入命令:redis-server--service-installredis.windows.conf测试Redis服务的运行。打开cmd指令窗口,进入解压的Redis文件路径,输入命令如下:redis-cli其中redis-cli是客户端程序,如图3-20显示正确端口号,则表示服务已经启动。运行Redis,输入以下命令:seta123geta命令set表示设置键值对,命令get表示取出键值对,运行如图3-21所示。OrientDB是一个开源NoSQL数据库管理系统。OrientDB属于NoSQL系列,第二代分布式数据库。在OrientDB之前,市场上有几个NoSQL数据库,其中一个是MongoDB。MongoDB和OrientDB包含许多常见功能,但引擎是根本不同的。MongoDB是纯文档数据库,OrientDB是一个具有图形引擎的混合文档。3.4OrientDB数据库

OrientDB的主要特点是支持多模型对象,即它支持不同的模型,如文档、图形、键/值和真实对象。例如,OrientDB图数据库的想法来自属性图,顶点和边是Graph模型的主要工件,它们包含属性,这些属性可以使它们看起来类似于文档。(1)Class(类)。Class用于定义数据结构的模型。类是一种数据模型,概念是从面向对象的编程范例中抽取出来的。作为一个概念,OrientDB中的类与关系数据库中的表具有最接近的关系,但是类可以是无模式的、模式完整的或混合的(与表不同)。类可以从其他类继承,并且每个类都有自己的一个或多个集群(默认情况下创建,如果没有定义)。(2)Record。Record是OrientDB中最小的加载和存储的单位。(3)Document(文档)。Document是OrientDB中最灵活的Record,文档由具有定义的约束的模式类定义,但文档可以通过以JSON格式导出和导入轻松处理。(4)Vertex(顶点)。在OrientDB的Graph模型下,每个结点叫做Vertex,每个Vertex也是一个Document,在OrientDB中顶点的基类是V。(5)Edge(边)。在OrientDB的Graph模型下,连接两个Vertex的边叫做Edge,Edge是有向性的而且仅能连接两个Vertex。(6)Clusters(集群)。集群是用于存储记录、文档或顶点的重要概念。简单来说,Cluster是存储一组记录(Record)的地方。每个数据库最多有32767个Cluster,每个Class都必须至少有一个对应的Cluster。(7)RecordID

。当OrientDB生成记录时,数据库服务器自动为记录分配单位标识符,称为“RecordID”(RID)。每个record都有一个RecordID。(8)关系。OrientDB支持两种关系:引用和嵌入。引用关系意味着它存储到关系的目标对象的直接链接。嵌入关系意味着它在嵌入它的记录中存储关系。(1)OrientDB下载。下载地址如下:/download,如图3-34所示,在此页面中单击Download按钮,下载OrientDB。(3)进入到bin目录中,如图3-36所示,双击“server”启动OrientDB服务。成功启动OrientDB服务后运行界面如图3-37所示。(4)启动OrientDB服务服务后,设置密码为“123456”,默认使用的用户名(User)为“root”。设置密码界面如图3-38所示。(5)在浏览器中输入:http://localhost:2480,在User处输入“root”,在Password处输入“123456”,如图3-39所示。(7)在OrientDB的bin目录中双击“console”

图标,如图3-41所示,启动OrientDB。(8)进入OrientDB运行界面,如图3-42所示。Python操作MySQL数据是通过第三方API库PyMySQL实现的,PyMySQL是从Python连接到MySQL数据库服务器的接口。简单理解就是,PyMySQL是Python操作MySQL数据库的三方模块。可以理解为可以在Python中连接数据库执行MySQL命令。(1)安装PyMySQL安装PyMySQL模块方法一:直接在pycharm编译器里面输入 pipinstallpymysql。方法二:win+r-->输入cmd-->在里面输入pipinstallpymysql。在Windows终端窗口执行pipinstallpymysql,计算机必需先安装好Python编译器。安装过程如图3-50。3.5Python操作MySQL数据库

这里通过PyMySQL的connect方法声明一个MySQL连接对象db,此时需要传入MySQL运行的host(即IP)。由于MySQL在本地运行,所以传入的是localhost。如果MySQL在远程运行,则传入其公网IP地址。后续的参数user即用户名,password即密码,port即端口(默认为3306)。使用Connect方法连接数据库,代码如下:pymysql.Connections.Connection(host=None,user=None,password='',database=None,port=0,charset='')[例3-9]创建MySQL数据库和创建数据表并使用Python往数据表中添加记录。①该例使用Python往user数据表中插入新的记录,使用sql命令如下:sql="insertinto数据表名()values()"

其中语句insertinto表示往数据表中插入记录,数据表名()表示要插入记录的表名称及表字段,values()表示要插入的数据值。插入记录操作如图3-51所示。该例在user数据表中插入一条新纪录,对应的数据值分别是:id:050101name:lesliescore:81

运行结果如图3-52所示。本章首先介绍了网络爬虫的概念和特点,然后介绍了MySQL的下载、安装方法,介绍了SQL语言的基础知识,最后介绍了如何使用PyMySQL操作MySQL数据库以及一些SQL语句的构造方法,后面读者会在实战案例中应用这些操作来存储数据。通过本章的学习,读者能够掌握Python操作MySQL数据库方法,重点需要读者掌握的是利用网络爬虫工具爬取Web数据存储到MySQL数据库方法。

3.6本章小结

3.7实训

项目四Scrapy框架

通过对本章的学习,了解Scrapy框架的特点,理解Scrapy框架的运行机制,理解Scrapy框架的实现方式,熟悉Scrapy框架中Python代码的书写。了解Scrapy框架的特点。理解Scrapy框架的运行机制。理解Scrapy框架的实现方式。熟悉Scrapy框架中Python代码的书写。Scrapy是一个使用Python语言编写的开源网络爬虫框架,是一个高级的Python爬虫框架。Scrapy可用于各种有用的应用程序,如数据挖掘,信息处理以及历史归档等,目前主要用于抓取web站点并从页面中提取结构化的数据。4.1Scrapy框架简介

在Windows7中安装Scrapy框架的命令如下:pipinstallScrapy。但是安装Scrapy通常不会直接成功,因为Scrapy框架的安装还需要多个包的支持,如twiste包、whl包

、lxml包、erface包、pywin32

包和pyOpenSSL包等,为确保Scrapy框架已安装成功,在Python中测试是否能够导入Scrapy库,输入命令:importscrapy,运行如图4-2所示。命令:scrapy.vesion_info可查看Scrapy的版本。

安装完成后,即可使用Scrapy框架爬取网页中的数据。在cmd命令行中输入“scrapy”即可查看Scrapy的常见命令,如图4-3所示。

Scrapy的命令有两种分类:全局命令与项目命令。比如在命令行直接输入“scrapystartprojectmyproject”命令,实际上是在全局环境中使用的。而当运行爬虫时,命令“scrapycrawlmyspider”是在项目环境内运行的。表4-1显示了Scrapy的常见命令及其含义。命令含义startproject创建爬虫项目genspider用于生成爬虫crawl启动spider爬虫check检查代码list列出所有可用的爬虫fetch将网页内容下载下来,然后在终端打印当前返回的内容version查看版本信息runspider运行spidersettings系统设置信息bench测试电脑当前爬取速度性能shell打开Scrapy显示台Scrapy框架由ScrapyEngine、Scheduler、Downloader、Spiders、ItemPipeline、Downloadermiddlewares以及Spidermiddlewares等部分组成,具体结构如图4-4所示。

Scrapy框架的工作流程当Spider要爬取某URL地址的页面时,首先用该URL构造一个Request对象,提交给Engine(图4-4中的1),随后Request对象进入Scheduler,按照某种调度算法排队,之后的某个时候从队列中出来,由Engine提交给Downloader(图4-4中的2、3、4)。Downloader根据Request对象中的URL地址发送一次HTTP请求到目标网站服务器,并接受服务器返回的HTTP响应,构建一个Response对象(图4-4中的5),并有Engine将Response提交给Spider(图4-4中的6)。Spider提取Response中的数据,构造出Item对象或者根据新的连接构造出Request对象。分别由Engine提交给ItemPipeline或者Scheduler(图4-4中的7、8)这个过程反复进行,直至爬完所有的数据。同时,数据对象在出入Spider和Downloader时可能会经过Middleware进行进一步的处理。在Scrapy框架中还有三种数据流对象,分别是Request、Response和Items。Request是Scrapy中的HTTP请求对象。Response是Scrapy中的HTTP响应对象。Item是一种简单的容器,用于保存爬取得到的数据。

在Scrapy框架中,Items代表Spider从页面中爬取的一项数据。在Scrapy中,Request、Response是最为核心的两个对象,它是连接爬虫、引擎、下载器、调度器关键的媒介,是不得不深入理解的两个对象。表4-2列出了Scrapy框架的数据流对象。类型方式作用Requestscrapy.http.Request()Request由Spider生成,由Downloader执行Responsescrapy.http.Response()Response由Downloader生成,由Spider处理Itemscrapy.item.Item()Item由Spider生成,由ItemPipeline处理Spider(爬虫)负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。具体来说就是Spider定义了一个特定站点(或一组站点)如何被抓取的类,包括如何执行抓取(即跟踪链接)以及如何从页面中提取结构化数据(即抓取项)。也就是说人们要抓取的网站的链接配置、抓取逻辑、解析逻辑等其实都是在Spider中定义的。4.2Spider

Spider是一个Scrapy提供的基本类,Scrapy中包含的其他基本类(例如CrawlSpider)以及自定义的spider都必须继承这个类。Spider是定义如何抓取某个网站的类,包括如何执行抓取以及如何从其网页中提取结构化数据。对于大多数用户来讲,Spider是Scrapy框架中最核心的组件,Scrapy爬虫开发时通常是紧紧围绕Spider而展开的。一般而言,实现一个Spider需要以下4步:步骤1,继承scrapy.Spider;步骤2,为Spider命名;步骤3,设置爬虫的起始爬取点;步骤4,实现页面的解析。Spider中常见属性含义name定义Spider名字的字符串allowed_domains包含了Spider允许爬取的域名(domain)的列表,可选start_urls初始URL元祖/列表。当没有制定特定的URL时,Spider将从该列表中开始进行爬取custom_settings

定义该Spider配置的字典,这个配置会在项目范围内运行这个spider的时候生效crawler定义Spider实例绑定的crawler对象,这个属性是在初始化Spider类时由from_crawler()方法设置的,crawler对象概括了许多项目的组件settings运行Spider的配置,这是一个settings对象的实例logger用Spider名字创建的Python记录器,可以用来发送日志消息start_requests(self)该方法含了Spider用于爬取(默认实现是使用start_urls的url)的第一个Requestparse(self,response)当请求url返回网页没有指定回调函数时,默认的Request对象回调函数,用来处理网页返回的response,以及生成Item或者Request对象log(message[,level,component])它是一个通过Spider记录器发送日志信息的方法.closed(reason)这个方法在Spider关闭时被调用.Scrapy爬虫开发流程要开发Scrapy爬虫,一般有以下几步:

步骤1,新建项目;

步骤2,确定抓取网页目标;

步骤3,制作爬虫;步骤4,设计管道存储爬取内容。[例4-2]创建一个最简单的Spider项目。(1)在D盘根目录中创建文件夹,名称为“spider”。(2)使用Scrapy创建爬虫项目,进入已经创建好的文件夹,并使用命令“scrapystartprojectmyspider”来创建项目,如图4-8所示。查看已经创建好的文件目录,如图4-9所示。(3)使用命令“startproject-h”查看startproject的帮助信息,如图4-10所示。(4)使用命令“dir”查看目录结构,如图4-11所示。(5)使用命令“scrapyfetch”显示爬取的网页信息,这里以爬取baidu页面为例,如图4-12,图4-13所示。(6)使用命令scrapygenspider-l来查看当前可以使用的爬虫模板,如图4-14所示。(7)进入myspider目录中输入命令“scrapygenspiderbaidu”创建爬虫文件,如图4-15所示。在spiders文件夹中查看已经创建好的baidu.py,如图4-16所示。创建Scrapy实例

[例4-3]创建一个最简单的Spider爬虫。该例以爬取凤凰网(/)为例,讲述Scrapy爬虫的创建和运行。运行Python,在spiders中的meiju.py中输入以下代码:importscr

温馨提示

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

评论

0/150

提交评论