基于Scrapy框架的网络爬虫实现与数据抓取
2020-10-21谢剑辉
[摘要]网络数据是重要的资产形态之一,提升数据提取与分析项目是当下该领域中研究的重点问题之一。本文以Scrapy开源技术为基础,参照其他网络编程的相关知识等,自定义一个拓展能力较强的网络爬虫原型程序。选用适宜的数据库抓取、保存数据,并以多线程并发结构为支撑,最大限度的提升了运作成效。
[关键词]Scrapy;网络爬虫;框架建设;数据抓取
在上个世纪90年代网络爬虫逐渐发展,现如今其已经渗透到人们网络日常生活中的诸多方面。一个优质的爬虫应有爬取目标确切、爬取过程高效、运行快速、后期处理有效等。为使爬虫富有以上特征,建设良好的架构是重要基础,进而促进爬虫快速辨识已访问过的页面,更高效率的提取主观所需的结构与内容。Scrapy框架的目的是为爬取网站内容、精确提获结构性数据,进而编写出的开源爬虫应用框架,本文主要探究其在网络爬虫达成及抓取数据方面的应用情况。
1,设计整体架构
从宏观上,可以把爬虫细化为如下三个模块:(1)前置规则预设模块:其功能是为程序正常运作提前规划将要提取的数据格式,有针对性的调换User-agentCookies登陆等数个监测账号;(2)网页抓取模块:该模块从原始URL被定义之时便开始抓取网页信息,初步提取并作基础分析,结合反馈结果类型,调取相应的回调函数;(3)后续数据处理模块:更进一步解读网页抓取模块的结果,判断其合法性,并将其存管与数据库内,或调整至Scheduler等待调整爬取。
2.爬虫实现过程
本文选定“新浪微博”为爬虫目标,“新浪微博”为国内家喻户晓的社交网站,选定其为爬取目标对象,能协助我们接触到更多新知识,感知大数据的发展趋向。
2.1前置规则预设模块
清晰设定爬虫爬取数据格式。具体是在item.py文件内,依照所要提取的字段规划相对应的类型,比如,Informationltem类被定义为爬取用户信息,我们基于Field()法去阐释数据字段(图1)[1]。
2.1网页抓取模块
于Spiders.py内设置该模块的代码,是项目的核心部分,于Spiders内自定义SinaSpider类。本文如下详细阐释Spiders类的作用:
(1)name与host特性:定义该类名称,这是爬虫仅有的标识。Host设定了爬虫的爬取区域。
(2)start.urls特性:是一个原始URL列表,提供了爬蟲初始运转时的目标,爬虫会将这些页面设为始发点,有针对性的抓取数据,我们采用用户ID将偏差、完整度较高的URL取代。而后采用start_requesets()方法促进用户ID与host地址有机整合过程,形成完整度较高的原始URL。
(3)Scrawl_ID、finish.ID均是Set类的变量:Python内的set类和其他类型语言之间有较高的相似度,属于一类无序性、不重复元素,基本功能是解除数次出现的元素。这里我们选用Set类变量去表示已爬取过的页面与待调整的爬取页面,取得的成效优良[2]。
(4)请求处置部分:于SinaSpider内自定义了start_requests()函数与四个回调函数。回调函数的作用是处置抓取用户信息、微博内容、粉丝以及关注的目标对象。当我们在回调函数内设置一个request后,Scrapy将会自行调整,传送该请求,并在该请求完成时,调用注册好的回调函数。cllback=self.parse代表的便是请求时使用parse作为回调函数,根据parse函数中定义好的xpath路径或获取字符存储至item字典,最终发送至Pipelines中进行后期处理。
2.3后置数据处理模块
基于Spider类,我们能顺利捕获爬取到目标数据,而后需要分析数据的存管问题。本文使用Mysq|数据库进行存储,有效应对爬取结果和数据库两者互相传导的问题,是该模块设计阶段需重点分析的问题之一。Pipelines.py内能进行系列性的处理过程,我们可以把其视为数据流水线。Pipelines.py确定立了MysqlPipeline类,共计包括两种方法,功能分别是初始化数据表、处置item并整合进库。基于pymsql开源模块和mysql构建交互性关系。
开启数据库的本地衔接,进而构建“Sina”数据库,而后制表与存储相关信息。
若经process_item()函数判别出字段数量符合要求且不为空,则将其整合至数据库内,以上步骤落实后提示后续数据处置工作结束。
3.呈现于分析数据抓取结果
程序运转后便得到“Sina”数据库,该数据库下存有四张表格,本文主要分析Information表的设置情况(见表)[3]。
4.结束语
本文以Scrapy技术为支撑,形成了一个易于制作、易于拓展的聚焦式爬虫、该爬虫以“新浪微博”用户为目标对象,抓获用户群体的主要信息。实践表明,采用Scrapy技术研发爬虫,有效率高、过程便捷等优势,顺利达成预期标准要求。
参考文献:
[1]朱丽英,吴锦晶.基于自动化测试的定向网络爬虫的设计与实现[J].微型电脑应用,2019,35(10):8-10.
[2]刘晖,石倩,基于网络爬虫的新闻网站自动生成系统的设计与实现[J].电子技术与软件工程,2019,20(13):18-19.
[3]邵晓文.多线程并发网络爬虫的设计与实现[J].现代计算机(专业版),2019,47(01):97-100.
作者简介:
谢剑辉(1999-09-25)性别:男籍贯:广东省梅州市人民族:汉族学历:本科。