大数据采集与预处理技术(微课版)课件 4.3 图书信息数据采集scrapy数据持久化_第1页
大数据采集与预处理技术(微课版)课件 4.3 图书信息数据采集scrapy数据持久化_第2页
大数据采集与预处理技术(微课版)课件 4.3 图书信息数据采集scrapy数据持久化_第3页
大数据采集与预处理技术(微课版)课件 4.3 图书信息数据采集scrapy数据持久化_第4页
大数据采集与预处理技术(微课版)课件 4.3 图书信息数据采集scrapy数据持久化_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2Scripy-redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务一分布式采集环境安装配置一、任务目标1、掌握Scrapy和Scrapy-redis组件的安装配置方法;2、了解Scrapy的工作机制和常见程序编写;3、会使用Scrapy-redis编写数据抓取程序;4、掌握常见的自然语言公开数据集获取方法;5、编写分布式爬虫程序完成图书信息数据采集。三、Scrapy数据持久化Scrapy可以将parse方法返回的数据存储到不同的文件或数据库中。1、保存到文件:①保存到CSV命令方法:scrapycrawlexampl(爬虫程序名称)–o***.csv(保存文件名)代码方法:可在parse方法中直接通过Python代码写入文件中:importscrapy,csvclassTestSpider(scrapy.Spider):name="test"start_urls=['/']#初始URL列表

defparse(self,response):items=[]books=response.xpath('//div[@class="info"]')forbookinbooks:title=book.xpath('./div/a/text()').get()author=book.xpath('./div[@class="author"]/text()').get()intro=book.xpath('./div[@class="more-meta"]//p[@class="abstract"]/text()').get()iftitleisnotNoneandauthorisnotNoneandintroisnotNone:item={'title':title,'author':author,'intro':intro}items.append(item)withopen('output.csv','w',newline='',encoding='utf-8')ascsvfile:#创建表头

fieldnames=['title','author','intro']#创建写入器

writer=csv.DictWriter(csvfile,fieldnames=fieldnames)writer.writeheader()#写入表头

#item数据写入csv文件

writer.writerows(items)if__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawltest'.split())1、保存到文件:②写入JSON文件命令方法:scrapycrawlexampl(爬虫程序名称)–o***.json(保存文件名)代码方法:可在parse方法中直接通过Python代码写入文件中:

#只需将上页代码的CSV数据保存,改为json保存即可withopen('output.json','w',encoding="utf-8")asjsonfile:#数据保存到json文件,indent是缩进并换行,ensure_ascii将Unicode转中文。

json.dump(items,jsonfile,indent=4,ensure_ascii=False)2、保存到数据库:①数据库链接配置要使用数据库需要在settings.py文件中配置数据库连接,包括数据库主机地址MYSQL_HOST、数据库名MYSQL_DATABASE、数据库用户名MYSQL_USER、以及密码MYSQL_PASSWORD,启用Pipeline。#配置数据库服务器地址,根据实际设置

MYSQL_HOST='localhost'

#配置数据库名

MYSQL_DATABASE='doubandb'

MYSQL_USER='root'

MYSQL_PASSWORD='Sziit123'#配置管道,注意管道名称

ITEM_PIPELINES={

"doubanproject.pipelines.MySQLPipeline":100,

}#其他设置如User-Agent……….#…………………#如果没有数据库可以使用云服务器6数据库#该数据库仅用作测试用,可能会被关闭MYSQL_HOST=‘6’

#配置数据库名

MYSQL_DATABASE=‘douban_book’

MYSQL_USER=‘root’

MYSQL_PASSWORD=******//不对外公开密码②定义Pipeline在pipelines.py中定义Pipeline,类名是MySQLPipeline,和setting.py中设置相同。示例如下:importmysql.connectorfrommysql.connectorimportError#定义itempipelineclassMySQLPipeline:#定义数据库连接

def__init__(self):self.cursor=Noneself.connection=Nonedefopen_spider(self,spider):#设置据库链接相关参数

try:self.connection=mysql.connector.connect(host=spider.settings.get('MYSQL_HOST'),database=spider.settings.get('MYSQL_DATABASE'),user=spider.settings.get('MYSQL_USER'),password=spider.settings.get('MYSQL_PASSWORD'),charset='utf8mb4'#添加字符集参数

)

self.cursor=self.connection.cursor()#开启数据库游标#创建数据库表

self.cursor.execute(""" CREATETABLEIFNOTEXISTSread_book(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(255),authorVARCHAR(512),introVARCHAR(255));""")exceptErrorase:spider.logger.error(f"ErrorconnectingtoMySQL:{e}")②定义Pipeline在pipelines.py中定义Pipeline(接上页):#关闭爬虫时的相关操作

defclose_spider(self,spider):ifself.connection.is_connected():self.cursor.close()#关闭游标

self.connection.close()#关闭链接

#定义数据存储方法read_book和spider的方法defparse(self,response)的yeild的对象一致

defprocess_item(self,read_book,spider):

#执行数据库插入

self.cursor.execute("""INSERTINTOread_book(title,author,intro)VALUES(%s,%s,%s)""",(read_book['title'],read_book['author'],read_book['intro']))#事务提交

mit()returnread_book③在spider下创建爬虫程序并执行importscrapyfromdoubanproject.itemsimportRead_BookItemclassTestSpider(scrapy.Spider):name="test"start_urls=['/']#初始URL列表

defparse(self,response):read_book=Read_BookItem() #read_book和pipelines的方法MySQLPipeline类的process_item方法参数名一致books=response.xpath('//div[@class="info"]')forbookinbooks:title=book.xpath('./div/a/text()').get()author=book.xpath('./div[@class="author"]/text()').get()intro=book.xpath('./div[@class="more-meta"]//p[@class="abstract"]/text()').get()iftitleisnotNoneandauthorisnotNoneandintroisnotNone:read_book['title']=titleread_book['author']=authorread_book['intro']=introyieldread_bookif__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawltest'.split())2、保存到数据库:④其它定义如果需要使用自定义Item类,需要在items.py文件定义类名和字段名,例如类名是MyItem,实例化myItem,则在spider程序数据解析parse方法中需要返回myItem,可以使用yieldmyItem方法。#read_book类

classRead_BookItem(scrapy.Item):

title=scrapy.Field()#书名

author=scrapy.Field()#作者

intro=scrapy.Field()#介绍⑤启动程序启动程序时要提前打开数据库服务器,确保防火墙放开数据库服务接口。程序运行和前面案例类似。3、保存到Redis存储系统Redis是一个高性能的键值存储系统,适用于存储临时数据或实现分布式爬虫。使用redis之前需要保证已经正常安装。在settings.py中配置redis连接。如下示例:#settings.py#配置redis数据库地

温馨提示

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

评论

0/150

提交评论