大数据采集与预处理课件:Scrapy框架采集汽车之家静态数据_第1页
大数据采集与预处理课件:Scrapy框架采集汽车之家静态数据_第2页
大数据采集与预处理课件:Scrapy框架采集汽车之家静态数据_第3页
大数据采集与预处理课件:Scrapy框架采集汽车之家静态数据_第4页
大数据采集与预处理课件:Scrapy框架采集汽车之家静态数据_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

使用Scrapy爬虫框架采集数据——爬取汽车之家数据 本章学习目标了解Scrapy爬虫框架的工作原理了解Scrapy爬虫框架的安装过程以及各组件的基本含义和用法掌握Scrapy爬虫框架采集数据的实例6.4任务实现 【实例6-8】这里将使用Scrapy爬虫框架创建一个Scrapy项目,编写网络爬虫爬取和抽取汽车之家的文章标题和内容数据,如图6-4所示,并将数据输出为JSON格式,同时存入MySQL中。图6-4汽车之家文章栏目的标题和内容页面现在需要在操作系统控制台或PyCharm控制台,使用scrapy命令:scrapystartprojectDemoAuto创建一个名为DemoAuto的项目,其中scrapystartproject为创建项目的固定语句,DemoAuto为自定义的项目名称,如图6-5所示。图6-5创建Scrapy项目通过观察,可以看见该项目被创建在createdin:C:\Users\Administrator\DemoAuto文件路径中。因此,使用PyCharm将其打开。打开之后,即可看见DemoAuto的项目目录。这和前面阐述的内容完全一致,包括:spiders,item.py,middlewares.py,pipeline.py,settings.py,如图6-6所示。scrapy.cfg:项目的配置文件DemoAuto/:该项目的名称。DemoAuto/items.py:项目中的item文件,用于实例化数据模型item。DemoAuto/pipelines.py:项目中的pipelines文件,用于处理数据的存。DemoAuto/settings.py:项目的设置文件。DemoAuto/spiders/:放置spider代码的目录,用于自定义爬虫的位置。图6-6Scrapy项目目录执行“File”→“Settings”菜单命令,在弹出的“Settings”对话框的左侧窗格中依次选择“ProjectDemoAuto”→“ProjectInterpreter”选项,然后选择Anaconda的包环境即可。这样就完成Scrapy项目的建立和Anaconda包环境的配置,如图6-7所示。图6-7配置Anaconda包环境执行“File”→“Settings”菜单命令,在弹出的“Settings”对话框的左侧窗格中依次选择“ProjectDemoAuto”→“ProjectInterpreter”选项,然后选择Anaconda的包环境即可。这样就完成Scrapy项目的建立和Anaconda包环境的配置,如图6-7所示。图6-7配置Anaconda包环境现在在工程文件中的spiders目录中创建一个名为SpiderDemo.py的文件。该文件的作用是编写自定义的spider代码。代码如下。引入scrapy模块importscrapy引入本地DemoAutoField中的AutoItem模板用于存储指定的数据。fromDemoAuto.DemoAutoFieldimportAutoItem自定义一个类,并将scrapy模块的Spider作为参数传入。类scrapy.spiders.Spider是最简单的spider,所有的spider包括自己定义的和scrapy提供的都会继承它。它只是提供最基本的特性,也是最常用的Spider类。

classMyScr(scrapy.Spider):

设置全局唯一的name,作为启动该spider的时候的识别名称。

name='DemoAuto'

填写爬取地址,作为该spider第一次爬取的url。start_urls=['./all/#pvareaid=3311229‘]编写自定义爬取方法。这里使用parse方法传入self和response作为参数,其中,response作为从start_urls返回的响应数据。

defparse(self,response):

实例化一个容器item,并保存爬取的信息

item=AutoItem()

这部分是爬取部分,使用xpath的方式选择信息,具体方法根据网页结构而定,这里将爬去汽车之家的文章标题和内容。先获取每个课程的div。

forboxinresponse.xpath('//*[@id="auto-channel-lazyload-article"]/ul/li/a'):获取指定的标题和内容,并赋值给item容器的两个字段。这里使用了extract()[0].strip()表示在循环中每次只抽取第一个元素的内容,并除去左右空白。

item['title']=box.xpath('.//h3/text()').extract()[0].strip()item['content']=box.xpath('.//p/text()').extract()[0].strip()

返回信息

yielditem

在与items.py的同级目录中创建一个名为DemoAutoField.py的文件。该文件的作用是替代items.py,用于实例化数据模型item。代码如下。引入scrapy模块importscrapy

编写model模板

classAutoItem(scrapy.Item):

储存标题。这里使用scrapy.Field()创建两个字段模型,title和content给item。

title=scrapy.Field()content=scrapy.Field()在与pipelines.py的同级目录中创建一个名为DemoAutoPipelines.py的文件。该文件的作用是替代pipelines.py,用于处理数据的存储。代码如下。引入scrapy模块importjson自定义一个名为AutoPipeline的类,并接受一个object对象作为参数。classAutoPipeline(object):def__init__(self):打开文件。如果没有创建该文件则自动创建一个名为data.json的文件。并使用utf-8作为字符集编码格式。

self.file=open('data.json','w',encoding='utf-8')process_item方法用于处理数据。这里处理的数据是传进来的item容器数据。

defprocess_item(self,item,spider):读取item中的数据。使用json.dumps将item转为JSON格式,之前先使用dict转为字典数据。

line=json.dumps(dict(item),ensure_ascii=False)+"\n"

写入文件

self.file.write(line)

返回itemreturnitemopen_spider方法在spider被开启时被调用。

defopen_spider(self,spider):passclose_spider方法在spider被关闭时被调用。

defclose_spider(self,spider):pass到此已经完成了一个简单的scrapy爬虫的编写。在控制台中使用scrapycrawlDemoAuto来运行一下,如图6-8所示。图6-8爬取的文章标题和内容

在获得了指定的数据之后,现在需要将数据持久化保存到MySQL中。之前,需要先在MySQL中创建一个名为file123的数据库以及数据表table123,其中包含字段title,content,如图6-9所示。图6-9创建数据库和表a)创建指定数据库和表的SQL语句b)数据库目录a)b)在与pipelines.py的同级目录中创建一个名为MySQLPipelines.py的文件。该文件的作用是替代pipelines.py,用于将数据持久化保存到MySQL。代码如下。引入pymysql模块importpymysql自定义一个方法dbHandle用于连接MySQL。defdbHandle():conn=pymysql.connect("localhost","root","xxxx","file123")returnconn自定义一个名为MySQLPipeline的类,并传入一个object参数。classMySQLPipeline(object):使用process_item方法打开MySQL数据库连接,并执行SQL语句。

defprocess_item(self,item,spider):dbObject=dbHandle()#实例化一个MySQL连接对象

cursor=dbObject.cursor()#使用游标操作数据库向数据库中插入指定的数据。

sql='insertintotable123(title,content)values(%s,%s)'try:执行SQL语句,并传入参数。

cursor.execute(sql,(item['title'],item['content']))dbObjectmit()except:dbObject.rollback()returnitem运行结果如图6-10所示。图6-10将数据存入MySQL在写好了DemoAutoPipelines.py和MySQLPipelines.py之后,还需要在settings.py中进行配置。代码如下。这里的数字范围是在1-1000,表示Pipeline执行的优先级,数字越小优先级越大。ITEM_PIPELINES={'DemoAuto.DemoAutoPipelines.AutoPipeline':300,#保存到文件中

'DemoAuto.MySQLPipeline.MySQLPipeline':300,#保存到mysql数据库}到此实现了scrapy爬取汽车之家文章

温馨提示

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

评论

0/150

提交评论