大采集处理技术 5_第1页
大采集处理技术 5_第2页
大采集处理技术 5_第3页
大采集处理技术 5_第4页
大采集处理技术 5_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

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

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务一分布式采集环境安装配置一、任务目标1、掌握Scrapy和Scrapy-redis组件的安装配置方法;2、了解Scrapy的工作机制和常见程序编写;3、会使用Scrapy-redis编写数据抓取程序;4、掌握常见的自然语言公开数据集获取方法;5、编写分布式爬虫程序完成图书信息数据采集。二、Scrapy爬虫框架1、简介:Scrapy是一个用于爬取网站并从页面中提取结构化数据的开源和协作框架,被广泛应用于数据挖掘、信息处理或存储历史数据等领域。ScrapyEngineSchedulerItemPipelineDownloaderSpiderSpiderMiddleware

DownloaderMiddleware

返回responses给Spider发送Items发送Requests发送Requests用于存放URL存放数据队列提取数据、URL发送请求自定义设置自定义请求①ScrapyEngine:控制整个系统的数据流处理,负责Spider、ItemPipeline、Downloader、Scheduler之间通讯、信号、数据传递等。②Spider:用来定义要爬取的网站、如何解析网页内容等,从引擎接收URL并返回解析结果,处理所有Responses,获取Item字段,将需要跟进的URL提交给引擎,再次进入调度器。③Scheduler:负责接收引擎发送过来的请求,管理待执行的请求队列,决定下一个请求是什么,确保每个请求都只执行一次。④ItemPipeline:Item定义了要抓取的数据结构,类似于Python字典。Pipeline在Spider之后执行,对Spider返回结果处理,包括清理、存储等。⑤DownloaderMiddleware:即下载中间件,主要功能是处理ScrapyEngine与Downloader之间的请求及响应⑥Downloader:在Scheduler发送Request给Downloader之前修改Request,在Response发送到Spider之前对其进行修改,负责下载网页内容,并将下载的内容返回给Spider。⑦SpiderMiddleware:可以自定义扩展ScrapyEngine和Spiders中间通信的功能组件,用来处理Spiders输入的响应和输出的请求。2、安装:pipinstallscrapy-i/simple使用如下命令测试是否正确安装:scrapyversion3、scrapy爬取数据步骤1、创建项目2、编写爬虫3、运行爬虫4、提取数据scrapystartprojectmyproject1)__init__.py:用于标识该目录为Python包,可以包含项目的初始化代码。2)Items.py:定义数据结构的文件,通常在这里创建Item类,用于存储爬取到的数据字段。3)Middlewares.py:包含自定义的请求和响应处理逻辑,用于修改请求、处理响应、处理错误等。4)Pipelines.py:负责处理爬取到的数据,例如清洗、验证和存储到数据库或文件中。5)Settings.py:项目的设置文件,用于配置全局选项,如用户代理、延迟、并发请求数等。6)Scrapy.cfg:项目配置文件,定义项目的路径和部署信息,方便管理多个Scrapy项目。7)Spiders:spiders目录是放置爬虫程序的,例如编写爬取网站规则。1、创建项目2、编写爬虫3、运行爬虫4、提取数据1)进入项目目录cdmyproject2)创建爬虫,“example”是爬虫名称,是目标网站。scrapygenspiderexample3)定义Itemimportscrapy#自动生成的ltem类classMyspiderItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()pass#自定义类classMyItem(scrapy.Item):title=scrapy.Field()time=scrapy.Field()4)创建spiders/example.py文件,修改parse方法,定义如何提取数据,须继承“scrapy.Spider”类,并且需要定义以下三个属性:name:爬虫的名字,属于必须定义字段,可以使用要爬取的网站名。start_urls:初始的UR列表,也就是要爬取网站,是数组类型。parse(self,response):每个初始的URL完成下载后都调用该函数,解析返回的网页数据,然后生成下一页的请求URL。#导入自定义的Item数据结构(以豆瓣图书为例)frommyproject.itemsimportMyItemclassExampleSpider(scrapy.Spider):name='example’ #爬虫名字start_urls=['/'] #初始URL列表defparse(self,response):item=MyItem() #使用xpath获取要爬取的字段title=response.xpath('//div[@class="nav-logo"]/a/text()').get()item['title']=title[0]print(item['title'])1、创建项目2、编写爬虫3、运行爬虫4、提取数据5)在项目根目录下,例如本例中需要先使用“cdmyproject”切换目录,再运行以下命令启动爬虫:scrapycrawlexample执行过程:Scrapy会为Spider的start_urls属性中的每个URL创建scrapy.Request对象,并将parse方法作为回调函数赋值给Request。Request对象经过调度,生成scrapy.http.Response对象并送回给parse()方法。如果要将提取的数据保存到文件中,可以使用命令:scrapycrawlexample-ooutput.json在python代码中执行使用如下代码:if__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawlbookinfo'.split())#格式cmdline.execute(f'scrapycrawl{ExampleS}'.split())6)项目设置有些网站会对爬虫做限制,需要在settings.py文件做设置以规避限制。常见设置如下:BOT_NAME=“myproject” #项目名称,自动生成SPIDER_MODULES=[‘myproject.spiders’] #

spider所在路径NEWSPIDER_MODULE=‘myproject.spiders’ #新spider默认所在路径DOWNLOAD_DELAY=2 #每次请求之间等待时间(秒)RANDOMIZE_DOWNLOAD_DELAY=True #DOWNLOAD_DELAY上随机添加一个范围为0.5倍的延迟,防止被目标网站识别为爬虫CONCURRENT_REQUESTS=3 #控制Scrapy并发请求的数量CONCURRENT_REQUESTS_PER_DOMAIN=4#每个域名的并发请求数量限制CONCURRENT_REQUESTS_PER_IP=4 #每个IP的并发请求数量限制DEFAULT_REQUEST_HEADERS={ #设置全局的默认请求头'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/534.57.2(KHTML,likeGecko)Version/5.1.7Safari/534.57.2',"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en",……} 没有爬到数据?反爬机制,没有设置User-agent1、创建项目2、编写爬虫3、运行爬虫4、提取数据6)项目设置settings.py。常见设置如下:USER_AGENT=‘Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36’ #请求设置USER_AGENT_LIST=[ #一个浏览器可能被禁止,可以改使用一个用户代理列表'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36','Mozilla/5.0(Macintosh;IntelMacOSX10_15_7)AppleWebKit/605.1.15(KHTML,likeGecko)Version/14.0.3Safari/605.1.15',...]RETRY_ENABLED=True #启用请求重试机制,处理超时、服务器错误等情况RETRY_TIMES=3 #RETRY_TIMES=3DOWNLOAD_TIMEOUT=15 #设置下载超时时间,单位为秒DEPTH_LIMIT=3 #限制爬取的页面深度,url中的链接还有子连接,这里是最多几层子连接DEPTH_PRIORITY=1 #使用优先级队列处理请求,深度优先级COOKIES_ENABLED=True #设置是否启用Cookies,默认为启用COOKIES_DEBUG=True #显示Cookies调试信息,用于调试与目标网站的Cookies交互LOG_LEVEL='INFO' #设置日志输出级别,可选择DEBUG、INFO、WARNING、ERROR、CRITICALHTTP_PROXY='xy.server:port' #代理设置HTTPS_PROXY='xy.server:port' #代理设置#其他设置还包括下载器中间件DOWNLOADER_MIDDLEWARES,爬虫中间件SPIDER_MIDDLEWARES设置,请参考配套教材选择是否使用。1、创建项目2、编写爬虫3、运行爬虫4、提取数据7)数据封装Item类用于定义和封装爬虫提取的数据结构,定义在Scrapy项目的items.py文件中,可以将爬虫从网页提取的数据字段定义在该类中。例如,定义Item类如下:classBookItem(scrapy.Item):#定义字段

name=scrapy.Field() #书的名称

price=scrapy.Field() #书的价格url=scrapy.Field() #书的链接scrapy.Field():每个Item的字段使用scrapy.Field()来定义,它本质上是一个占位符,可以存储任何类型的数据,如字符串、数字、列表、字典等。1、创建项目2、编写爬虫3、运行爬虫4、提取数据使用Item类:frommyproject.itemsimportBookItem

classBookinfoSpider(scrapy.Spider):name="bookinfo"allowed_domains=[""]start_urls=[‘/latest?subcat=%E5%85%A8%E9%83%A8’]#初始URL列表,“subcat=全部”

item=BookItem()defparse(self,response):books=response.xpath('//li[@class="mediaclearfix"]')forbookinbooks:self.item['name']=book.xpath('./div[@class="media__body"]/h2/a/text()').get()self.item['price']=book.xpath('./div[@class="media__body"]/div//a/text()').get()self.item['url']=book.xpath('./div[@class="media__body"]/h2/a/@href').get()#将封装好的item返回给管道,通过yield语句将item返回给ItemPipeline处理yieldself.itemif__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawlbookinfo'.split())1、创建项目2、编写爬虫3、运行爬虫4、提取数据定义Item类(更新):可以在Field()中添加元数据,这些元数据不会影响爬虫的行为,但可以用于说明字段的用途或存储相关信息。classBookItem(scrapy.Item):name=scrapy.Field(serializer=str)#指定序列化方式

price=scrapy.Field(description="priceinUSD")#添加描述url=scrapy.Field(output_processor=str.upper)#定义输出处理器定义ItemPipeline处理逻辑。在pipelines.py中,可以定义对Item进行处理的管道,例如数据清洗、保存等。classBookPipeline:defprocess_item(self,item,spider):#对价格字段进行清洗item['price']=float(item['price'].replace('$',''))#将数据打印、存储到数据库或文件#...returnitem1、创建项目2、编写爬虫3、运行爬虫4、提取数据多级嵌套Item类(更新):某个Item的字段本身也是一个定义的Item类型,这在实际当中较常见。如下例子中,BookItem包含了一个reviews字段,该字段可以是一个ReviewItem列表,表示用户对书的评价。importscrapyclassReviewItem(scrapy.Item):rating=scrapy.Field()comment=scrapy.Field()classBookItem(scrapy.Item):#定义字段

name=scrapy.Field() #书的名称

price=scrapy.Field() #书的价格

url=scrapy.Field() #书的链接

reviews=scrapy.Field() #评价,嵌套ReviewItem1、创建项目2、编写爬虫3、运行爬虫4、提取数据多级嵌套Item类使用:classBookinfoSpider(scrapy.Spider):name="bookinfo"allowed_domains=[""]start_urls=['/latest?subcat=%E5%85%A8%E9%83%A8']#初始URL列表

item=BookItem()defparse(self,response):books=response.xpath('//li[@class="mediaclearfix"]')forbookinbooks:self.item['name']=book.xpath('./div[@class="media__body"]/h2/a/text()').get()self.item['price']=book.xpath('./div[@class="media__body"]/div//a/text()').get()self.item['url']=book.xpath('./div[@class="media__body"]/h2/a/@href').get()review_item=ReviewItem()review_item['rating']=book.xpath('./div[@class="media__body"]//span[@class="font-smallfleft"]/text()').get()review_item['comment']=book.xpath('./div[@class="media__body"]//span[@class="fleftml8color-gray"]/text()').get()#将封装好的item返回给管道,通过yield语句将item返回给ItemPipeline处理self.item['reviews']=review_itemyieldself.itemif__name__=='__main__':fromscrapyimportcmdlinecmdline.execute(f'scrapycrawlbookinfo'.split())1、创建项目2、编写爬虫3、运行爬虫4、提取数据8)中间件Scrapy中间件(Middleware)是在Scrapy执行请求和响应的过程中,用于对请求、响应和其他数据进行处理的组件。中间件处于引擎和爬虫之间,提供了钩子函数,允许在请求发出或响应接收前后进行修改和处理。包括:①DownloaderMiddlewares(下载器中间件):处理请求和响应的流动,位于Scrapy引擎和下载器之间。可以用它来修改请求头、处理代理、处理重定向等。其主要钩子方法包括:process_request(self,request,spider):在Scrapy调度器将request传递给下载器之前被调用。可以修改请求,添加自定义请求头、代理等。process_response(self,request,response,spider):在Scrapy从下载器接收到响应后调用。可以在此处理或修改响应,然后再传递给爬虫。process_exception(self,request,exception,spider):当下载器或中间件在处理请求时抛出异常时调用。②SpiderMiddlewares(爬虫中间件):处理爬虫和引擎之间的输入输出,位于Scrapy引擎和爬虫之间。用它来修改或过滤从响应生成的Item或Response,或者处理爬虫生成的Response。常见的钩子方法包括:process_spider_input(self,response,spider):在response传递给爬虫之前调用,可以用来过滤或修改响应。process_spider_output(self,response,result,spider):在response被爬虫解析之后,生成的result(通常是Request或Item)传递给引擎之前调用,可以修改或过滤这些结果。Process_spider_exception(self,response,exception,spider):在爬虫解析response过程中抛出异常时调用,可以用来处理异常。Process_start_Requests(self,start_Requests,spider):处理爬虫的初始请求,通常用于修改或扩展初始请求。1、创建项目2、编写爬虫3、运行爬虫4、提取数据下载器中间件示例:classCustomUserAgentMiddleware:defprocess_request(self,request,spider):#修改请求的User-Agentrequest.headers['User-Agent']='CustomUserAgent1.0'defprocess_response(self,request,response,spider):#可以在此对响应进行处理或修改

returnresponse #确保返回修改后的响应

defprocess_exception(self,request,exception,spider):#捕获处理请求时的异常

spider.logger.error(f"Exceptionoccurred:{exception}")returnNone #可以返回一个新的response或request,返回None则交给其他中间件处理1、创建项目2、编写爬虫3、运行爬虫4、提取数据爬虫中间件示例:classAddItemFieldMiddleware:defprocess_spider_output(self,response,result,spider):foriteminresult:ifisinstance(item,dict): #确保是Itemitem['new_field']='value' #添加新字段

yielditem #确保继续传递处理后的结果9)配置中间件中间件在Scrapy项目的settings.py文件中通过DOWNLOADER_MIDDLEWARES或SPIDER_MIDDLEWARES进行启用和配置。每个中间件都有一个优先级(整数值),优先级数值越低,中间件越早执行。配置下载器中间件示例如下:DOWNLOADER_MIDDLEWARES={'myproject.middlewares.CustomUserAgentMiddleware':543,}SPIDER_MIDDLEWARES={'myproject.middlewares.AddItemFieldMiddleware':600,}谢谢!大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2Scrapy-redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务一分布式采集环境安装配置一、任务目标1、掌握Scrapy和Scrapy-redis组件的安装配置方法;2、了解Scrapy的工作机制和常见程序编写;3、会使用Scrapy-redis编写数据抓取程序;4、掌握常见的自然语言公开数据集获取方法;5、编写分布式爬虫程序完成图书信息数据采集。二、Scrapy-redis爬虫框架1、简介Scrapy-Redis是一个Scrapy的扩展,用于实现分布式爬虫。允许多个爬虫实例共享请求和数据,适合大规模数据抓取。特性如下:①分布式请求管理:Scrapy-Redis使用Redis作为请求队列,多个爬虫可以同时从同一个Redis队列中获取请求,提高了爬取效率。②数据去重:它提供了基于Redis的去重机制,确保每个请求只被处理一次,避免重复抓取相同页面。③数据存储:Scrapy-Redis可以将抓取到的数据存储在Redis中,方便后续处理和分析。④易于集成:通过简单的配置,Scrapy-Redis可以与现有的Scrapy项目无缝集成,支持常用的Scrapy组件。2、安装pipinstallscrapy-redis3、连接Scrapy和redis启用scrapy-redis可以在可以在scrapy项目settings.py文件中配置Redis连接,并启用相关中间件。如下示例:#settings.py#定义scrapy-redis设置SCHEDULER="scrapy_redis.scheduler.Scheduler"DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"#启用redis访问队列排队功能SCHEDULER_PERSIST=True#定义链接Redis时的host和接口(可选配置)REDIS_HOST='localhost'REDIS_PORT=6379#定义item管道ITEM_PIPELINES={'myproject.pipelines.MyprojectPipeline':300,'scrapy_redis.pipelines.RedisPipeline':400,}#设置Redis管道REDIS_ITEMS_KEY='myproject:items'4、继承RedisSpider创建爬虫时,继承自RedisSpider。如下示例:fromscrapy_redis.spidersimportRedisSpider #导入RedisSpiderclassMySpider(RedisSpider):name='myspider'redis_key='myspider:start_urls'defparse(self,response): ….. #解析逻辑5、使用Redis发送URL启动redis软件(需要手动安装该软件),通过命令向Redis添加起始URL来启动爬虫,多个爬虫实例可以同时从Redis中抓取数据。需要手动将起始URL推入Redis,命令如下所示:redis-clilpushexample_spider:start_urls/latest?subcat=%E5%85%A8%E9%83%A86、中文处理注意如果输入的值存在中文可能存在乱码,这是因为redis和windows命令窗口编码不一致问题导致的,例如如果需要输入如下键值:

lpushdouban_books:start_urls/latest?subcat=全部实际显示:lpushdouban_books:start_urls/latest?subcat=계ᄉ通用的解决方法是在cmd命令窗口输入“chcp65001”,然后再打开redis-cli.exe,输入示例如下:redis-cli.exe--rawlpushdouban_books:start_urls/latest?subcat=全部虽然这种输入可以解决显示问题,但是实际测试发现中文“小说”值输入仍有问题。可以通过把中文转换为URL的UTF-8编码格式输入(“全部”对应的URLUTF-8编码值是%E5%85%A8%E9%83%A8):

lpushdouban_books:start_urls/latest?subcat==%E5%85%A8%E9%83%A87、项目运行

1)运行

程序完成配置后,可以在项目目录下运行爬虫,命令和运行scrapy项目一致,命令如下所示:scrapycrawlexample_spider

2)分布式爬取

如果需要分布式爬虫,可以在多台机器或多个终端同时运行相同的爬虫实例,爬虫将共享同一个Redis队列,从而实现分布式爬取。

3)检查爬取结果

爬取的数据会被存储在Redis的myproject:items列表中,可以使用RedisCLI查看,命令如下所示:redis-clilrangemyproject:items0-1谢谢!大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求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数据库地址和端口REDIS_HOST='localhost'REDIS_PORT=6379在pipelines.py中定义Pipeline,示例代码如右:importredisclassRedisPipeline:#定义spider打开方法,链接redisdefopen_spider(self,spider):self.client=redis.StrictRedis(host=spider.settings.get('REDIS_HOST'),port=spider.settings.get('REDIS_PORT'))#定义spider关闭方法,关闭redis链接

defclose_spider(self,spider):self.client.close()#定义数据存储方法

defprocess_item(self,item,spider):self.client.rpush('items',dict(item))returnitem#在settings.py中启用PipelineITEM_PIPELINES={'myproject.pipelines.RedisPipeline':300,}谢谢!大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2Scripy-redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:自然语言数据集自然语言处理(Neuro-LinguisticProgramming,NLP)领域有很多公开的标准数据集,用于各种自然语言处理任务,例如文本分类、机器翻译、情感分析、问答系统、命名实体识别等。1、文本分类数据集数据集名称数据集介绍数据集链接IMDB电影评论数据集主要用于情感分析任务,包含50000条电影评论,标注为正面或负面情感,广泛用于情感分类任务。/~amaas/data/sentiment/AGNews主要用于新闻分类任务,该数据集包含四类新闻(World,Sports,Business,Sci/Tech)的文本数据,适用于文本分类任务。http://groups.di.unipi.it/~gulli/AG_corpus_of_news_articles.htmlYelpReviews主要用于情感分析任务,Yelp评论数据集包含大量用户对餐厅等场所的评论,适用于情感分析任务。/datasetDoubanMovieReviews数据集主要用于情感分析任务,包含豆瓣电影的用户评论,标注了情感极性(正面、负面)。该数据集可用于情感分类、文本情感倾向分析。从豆瓣电影爬取或使用现有的公开版本今日头条新闻文本分类数据集主要用于新闻分类任务,TNEWS数据集来自今日头条的新闻文本,包含多个类别,共382688条数据,分布于15个分类中,适用于新闻分类任务。/aceimnorstuvwxz/toutiao-text-classfication-datasetIflytek长文本分类数据集主要用于应用场景分类任务,该数据集来自iFLYTEK,由不同的应用场景文本组成,共有119个类别,适合多类文本分类任务。/2、机器翻译数据集数据集名称数据集介绍数据集链接WMTWMT(WorkshoponMachineTranslation),主要用于机器反义任务,WMT提供了多语言平行语料库,包括英语、德语、法语、汉语、西班牙语等,用于机器翻译任务。每年都会举办翻译竞赛。/wmt20/translation-task.htmlIWSLTIWSLT(InternationalWorkshoponSpokenLanguageTranslation),主要用于口语翻译任务,包含各种演讲(TEDTalks)的双语平行语料库,主要用于口语翻译和句子翻译任务。https://wit3.fbk.eu/CCMTCCMT(ChinaConferenceonMachineTranslation),主要用于中文-多语言机器翻译任务,CCMT是中国机器翻译领域的顶级会议,提供了中文与其他语言(如英语、日语、蒙古语、藏语等)的平行语料库,适用于中文翻译模型的开发。/OPUSProject主要用于多语言机器翻译任务,OPUS是一个大型开源平行语料库项目,包含许多不同语言对的翻译数据集,例如中文-英语、中文-日语、中文-法语等。OPUS提供了大量平行句对,适合多语言机器翻译任务。https://opus.nlpl.eu/UM-CorpusUM-Corpus(UMChinese-EnglishParallelCorpus),主要用于中文-英语机器翻译任务,UM-Corpus是香港中文大学开发的中文-英语平行语料库,包含多种不同领域的句子对。它适合用于中英翻译模型的训练。http://nlp2ct.cis.umac.mo/um-corpus/3、问答对话数据集数据集名称数据集介绍数据集链接SQuADSQuAD(StanfordQuestionAnsweringDataset),主要用于机器阅读理解任务,SQuAD是一个大规模问答数据集,包含问题和对应的文章段落,答案通常在段落中可以直接找到。SQuAD2.0还包含无法从文章中找到答案的问题。https://rajpurkar.github.io/SQuAD-explorer/NaturalQuestions(NQ)NaturalQuestions(NQ)主要用于问答系统,由Google发布,包含真实的用户问题以及来自维基百科的答案,适用于基于文档的问答任务。可以从阿里云下载:/dataset/92187TriviaQA主要用于问答系统任务,包含问答对和对应的证据文件,问题来源于问答比赛和搜索引擎查询。/triviaqa/Persona-Chat主要用于对话系统任务,一个用于对话系统训练的数据集,包含个性化对话,适用于个性化聊天机器人训练。PERSONA-CHAT包括10981个对话以及164356个语句,由1155个人参与对话,每个人指定了至少5句profile句子表示其个性。/facebookresearch/ParlAI/tree/master/projects/personachatIEMOCAP主要用于对话理解任务,例如情感识别,数据是英文,包括视频、音频、文本数据,包含151个对话、7433个语句、10个对话角色、10种情感标签。/iemocap/DoubanConversationCorpus主要用于常规开放域对话,数据集是中文文本,Douban数据集主要爬取自中文豆瓣论坛,包含1.1M个对话,7.7M个语句。/MarkWuNLP/4、命名实体识别数据集数据集名称数据集介绍数据集链接CoNLL-2003主要用于命名实体识别任务,这个经典数据集用于英语和德语的命名实体识别任务,标注了实体类别如人名、地名、组织等。https://www.clips.uantwerpen.be/conll2003/ner/OntoNotes5.0主要用于命名实体识别、核心指代解析任务,是一个多语言的大型语料库,提供标注的实体、语义角色、句法结构等,广泛用于多种NLP任务。/LDC2013T19电商NERTaobao主要基于Taobao电商数据制作的一个命名实体数据集,该数据集包括了4大类(商品名称、商品型号、人名、地名)、9小类实体类别(电脑、汽车、日用品等)。该数据集由阿里巴巴达摩院和新加坡科技设计大学联合提供。其中,训练数据集6000条,验证数据集998条,测试数据集1000条。/allanj/ner_incomplete_annotation中国文学-NER该数据集基于中国文学文章进行标注制作,共计包含726篇文章。一共定义了7个实体:物件、任务、地址、事件、计量单位、组织、出处等。/lancopku/Chinese-Literature-NER-RE-Dataset5、文本生成数据集数据集名称数据集介绍数据集链接GPT-2WebText主要用于语言建模、文本生成任务,用于训练GPT-2模型的数据集,包含从Reddit上高质量帖子中提取的文本。数据集未公开,可以通过openAI了解细节。OpenSubtitles主要用于文本生成、机器翻译任务,包含大量字幕文件,适用于对话生成任务。/LDC2013T19CommonCrawl主要用于开放域文本生成任务,是一个开放的网络爬虫数据集,包含来自全球网站的大规模文本数据。它是GPT-3等大型模型的训练来源之一,适用于大规模语言模型的训练。WikiText主要用于长文本生成、语言模型训练任务,是从维基百科中提取的高质量长篇文章,内容包含详细的百科知识,适合用于训练语言模型,尤其是生成长文本。/research.metamind.io/wikitext/wikitext-103-raw-v1.zipCOCOCaptions主要用于图像描述生成,COCOCaptions数据集包含图像及其对应的文字描述,主要用于训练生成图像描述的模型,适合多模态文本生成任务。/#captions-2015图书信息数据集数据集名称数据集介绍数据集获取方法GoodreadsAPIGoodreads是一个知名的读书社区,用户可以为书籍撰写评论、评分和书评。通过Goodreads提供的API,开发者可以访问大量的图书评论数据,适合用于分析用户对书籍的反馈。可以使用GoodreadsAPI获取评论、评分、书籍元数据等信息。GoodreadsAPI有访问限制,确保在采集时遵循其使用政策。链接:/apiAmazonProductAdvertisingAPIAmazon作为全球最大的在线书店之一,包含了大量书籍的用户评论。通过Amazon提供的ProductAdvertisingAPI,可以获取图书的评论数据,包括用户评分、评论内容、发布日期等。使用ProductAdvertisingAPI请求图书的评论信息。API使用需要申请,且有使用限额,需遵守Amazon的政策。链接:/LibraryThingAPILibraryThing是另一个读书社交网站,用户可以标记书籍、撰写书评、给书籍打分。它的API可以用于获取图书的评论数据。通过LibraryThing的API进行评论数据的提取,获取用户对书籍的评价、评分等信息。链接:/servicesBookCrossingDatasetBookCrossing是一个全球的图书交换和书评平台,BookCrossing数据集包含了大量用户对书籍的评分信息。虽然不包含详细的评论文本,但适合用于评分预测等任务。可以从以下提供的公开资源中下载该数据集。链接:/datasets/book-crossing/DoubanBookAPI(豆瓣读书API)豆瓣是中国一个广受欢迎的文化交流平台,豆瓣读书提供了丰富的书籍评论、评分和书评。通过豆瓣读书API,开发者可以获取中文书籍的评论和评分数据。通过豆瓣读书API进行数据采集,获取用户对书籍的评价和书评。链接:/wiki/?title=book_v2,如果失效使用链接/mw/dataset/5cbeb2088c90d7002c822b18KaggleBookReviewDatasetsKaggle提供多个关于书籍评论的公开数据集,包含用户评论、评分等信息,适合用于情感分析、推荐系统、评分预测等任务。在Kaggle上搜索相关的图书评论数据集,可以直接下载使用。链接:/datasets谢谢!大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2Scripy-redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务一分布式采集环境安装配置一、任务目标1、掌握Scrapy和Scrapy-redis组件的安装配置方法;2、了解Scrapy的工作机制和常见程序编写;3、会使用Scrapy-redis编写数据抓取程序;4、掌握常见的自然语言公开数据集获取方法;5、编写分布式爬虫程序完成图书信息数据采集。1、创建项目在命令行中使用scrapy命令创建一个doubanproject项目。命令如下所示:

scrapystartprojectdoubanproject切换到doubanproject项目,使用如下命令生成爬虫doubanbook程序:

scrapygenspiderdoubanbook2、确定爬虫字段本次爬取的图书信息数据将为以后各类模型训练使用,因此尽可能爬取图书相关字段,例如“书名”、“缩略图URL”、“作者”、“出版社”、“出版时间”、“评论数量”、“小简介”、“子连接”、“评分”、“简介”、“作者简介”、“书的相关标签”。3、定义item#在items.py文件中定义importscrapyclassDoubanprojectItem(scrapy.Item): #definethefieldsforyouritemherelike:#name=scrapy.Field() passclassBookItem(scrapy.Item): book_name=scrapy.Field() #书名 book_img_url=scrapy.Field() #书的缩略图 book_author=scrapy.Field() #作者 book_publisher=scrapy.Field() #出版社 book_publish_time=scrapy.Field() #出版时间 book_grade=scrapy.Field() #评论数量 book_description=scrapy.Field() #小简介 book_son_url=scrapy.Field() #子连接 book_score=scrapy.Field() #评分 book_introduction=scrapy.Field() #简介 book_author_introduction=scrapy.Field() #作者简介 book_labels=scrapy.Field() #书的相关标签4、图书字段xpath筛选书名: //li[@class="subject-item"]/div[2]/h2/a@title书的缩略图: //li[@class="subject-item"]/div[1]/a/img@src作者: //li[@class="subject-item"]/div[2]/div[1]/text(),格式是“作者/出版社/出版时间”出版社: //li[@class="subject-item"]/div[2]/div[1]/text()出版时间: //li[@class="subject-item"]/div[2]/div[1]/text()评论数量: //li[@class="subject-item"]//span[@class="pl"]/text()小简介: //li[@class="subject-item"]//p/text()子连接: //li[@class="subject-item"]//h2/a/@href评分: //*[@id="interest_sectl"]/div/div[2]/strong/text(),子连接页面中,下同简介: //*[@id="content"]/div/div[1]/div[3]/div[3]/div/div/p/text()作者简介: //*[@id="content"]/div/div[1]/div[3]/div[2]/div/div/p/text()书的相关标签://div[@id="db-tags-section"]/div/span/a/text()5、编写pipeline#需要安装mysql-connector-pythonimportmysql.connectorfrommysql.connectorimportError#定义itempipelineclassDoubanprojectPipeline:#定义数据库连接def__init__(s

温馨提示

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

评论

0/150

提交评论