admin 管理员组

文章数量: 1086019


2024年2月27日发(作者:c中goto的用法)

I软件研发与应用I ..一S0删^REnEVEl0P啊EHT&APPLICATION …… . -… ……一-.… ……………. , … r… … 一 基于Scrapy的网络爬虫设计与实现 云洋 (…尔省青岛第 中学,I【I东青岛266lO1) 摘 要:互联网中包含大量有价值的数据,网络爬虫通过既定规则可以自动地抓取互联网的网页数据 并下裁至本地存储研究了网络爬虫的工作原理和Scrapy框架模块,提出了基于Scrapy框架构建工程 化网络爬虫爬取定向网页数据的4步流程法,基于此方法步骤构建网络爬虫实现2018年高校自主招生 简章数据的爬取和存储 实验结果证明,基于Serapy框架可有效快捷地构建3-程化网络爬虫 关键词:Python语言;网络爬虫;Scrapy框架;4步流程 l概述 网络爬虫义被称为做网络蜘蛛、网络机器人….它 垃一种能够根据给定URI 按照一定的规则,自动搜集 信息以及浏览器类 信息等 (2)获取页而响 :在服务器 常响 的情况下. 用户会收到所请求网页的r sI II1Se,一般包 Irr川 、 Json字符申或其他二进制格式数据(如}见频. 片)等. (3)页面内容解析:川相幢的解析器或转换 ‘法处 理获取的网页内容,fn1 J}{网页解析器解析H FMI 代 . 互联网数据信息的程序 互联网中包含大量有价值的数 掂,网络爬虫通过既定规则可以自动地抓取网页数据 下载至本地 已有一些向向定向网站特定信息的网络爬 虫,如QQ空问爬虫一天可抓取400万条日志、说说、 个人信息等数据:知乎爬虫抓取各种话题下的优质答 将Json形式数据转换成Json对象后进行解折.fn1粜址 二进制数据,则保存列义件进一步待处理 (4)抽取并存储数据:清洗处 好的数批I,f以持久 化存储在本地。可以用CSV、Json或text等义什仃储. 也可以SQLite、MySQI 或者MongoDB等数据J午存储I I 2.2 Scrapy框架 案;京东爬虫爬取商品、评论及销售数据。 Python语言是一种面向对象、解释型、带有动态语 义的高级程序设计语言,其语法简洁清晰,并具有中富 喊大的类J车。Python包含优秀的网络爬虫框架和解析技 术,Python语言简单易川且提供_r网站处理的标准库. Scrapy框架足用Python语青实现可爬取I圾J贝提取结 构化数据的应川框架、s(1rapy框架包含S¨ lv Engin (Serapy引擎)、Scheduler(渊度器)、Downloadei’(卜戴 器)、Spiders(爬虫)、hem Pipeline(管道)、I)ownhKid( r 与爬虫相关的有urllih、requests、bs4、scrapy等I I,其 『f1 Scrapy是一个功能懂大的爬虫框架。不仅能便捷地 构建request、方便地解析response,还可以将网络爬虫 I 程化、模块化,用户采用Scrapy技术框架可快速地搭 建专业级网络爬虫程序实现定向网站网页数据的爬取。 Middlewares(下载器巾间件)等组件HI。Sel·apy 图1所示,其中带箭头线表示数据流向 如 2网络爬虫的原理与Scrapy框架 网络爬虫是按照一定规则能自动地抓取万维网信息 的程序或者脚本。网络爬虫通过网络请求从Web网站 甬。页或指定页面开始解析网贞获取所需内容,并通过网 贞『{1的链接地址不断进入到下一个网页.直到遍历完这 个网站所有的网页或满足爬虫设定的停止条件为止 、 2.1 网络爬虫的工作原理 Scrapy Engine(引擎)是其余几个纰什的连接卞受 心,负责组件问的信号和数据传递 Spiders(爬虫)发 Requests请求.经m Scrapy Engine(Scrapy rJl )交 给Scheduler(iJ占l度器);Scheduler(训度器)接收fjl擎 所发送的Reques!请求, i 按照特定的方式将』 州放入 队列,待到有需要时洱最新交还给r)l擎送7t-1)ownlo uh I· (下载器);Downloader(下戡器)获得Req1]esls ifIf求, 网络爬虫爬取页面就足模拟使用浏览器获取贞面信 息的过程,其爬取流程一般包含如下4个步骤: 作者简介:云洋(2001一),女,研究方阳: 竹机 序设计、Web 川 、 收稿日期:201 8—06—19 (1)发起请求:通过目标URL向服务器发起re— quest请求,清求头header一般包含请求类型、cookie 害 -_ii2 0圬18童.瓣09 19 

t_ ‘ _ 、 H t ’-l_ ’_m ‘ ‘ - -。 ‘ r _ ’_ _ _ ’ 实用第一 智慧密集 .。 , . 。, .. . 。. ,。 . , 。 然后根据Requests请求.从网络下载数据,获取相对应 的响应(Responses)交还给引擎,由引擎转交给Spi. ders部分来处理:Spiders分析处理获取的响应(re sponse),提取出item字段所需要的数据内容,交给 hem Pipeline进行下载。Spiders和Item Pipeline是需要 令.运行此文件启动爬虫。 基于以上Scrapy框架构建网络爬虫的4步流程.开 发者只需针对定向网站网页爬取内容.将Scrapy框架 相应模块编写具体代码,就可以快速完成一个专业级的 网络爬虫 用户根据响应的需求进行编写的。Downloaders Middle. wares这个中间件通过插入自定义代码扩展Scrapy的功 3基于Scrapy框架设计定向网站爬虫 高考网(www.gaokao.com)是发布关于高考资讯、 能。Spider Middlewares是用于Spider和引擎之间通信的 功能组件,负责完成Response(响应)进入Spider模块 和从Spider发送Request(请求)的过程。 高考备战、高考报考、高中信息、试题库和院校库等全 国高考信息的权威网站。全国高中考生可通过该网站查 询高考政策、高校招生简章、自主招生简章以及高考成 绩、分数线、志愿填报和录取等信息。在该网站查询全 国90所高校的自主招生简章时需要依次访问90个网页 链接。基于Scrpay框架设计实现了定向网页爬虫抓取 \Requesls 套 hems Responds 2018年高考网各高校自主招生简章,并存储到本地JSON 文件格式,方便考生分析比较各高校自主招生简章信息。 选取gaokao高考网的2018全国各大高校自主招生 简章汇总列表网页作为网络爬虫爬取的起始地址.抓取 各个高校招生简章网址,然后进入网址爬取各高校自主 - 招生简章内容。基于Scrapy框架技术构建高考自主招 生简章爬虫的过程主要包含如下4个步骤: (1)创建Scrapy T程CollegeSpider[CollegeBriq 图1 Scrapy框架 2.3基于Scrapy框架搭建工程化网络爬虫 PyCharnl带有一整套可以帮助用户在Python发时提 使用scrapy startproject CollegeSpider命令,创建一 个新的CollegeSpider目录如图2左框所示。在College. 高效率的T具,比如调试、语法高亮、Project管理、代 码跳转、智能提示、自动完成、单元测试、版本控制 等。选取安装PyCharm作为Python集成开发环境,可 有效提高网络爬虫的开发效率。基于Scrapy框架提出 如下4步流程法可快速构建lT程网络爬虫: (1)新建一个Serapy—I 程。在命令行里键人scrapy startproject name命令,创建一个新的name目录存放完 整框架、各个模块以及一些默认的系统设置代码。 (2)分析定向网站网页爬取内容,编写Item.PY定 义提取的Item,编写抓取网站数据的spider并提取Item 数据 Spider目录下创建Python模块CollegeBrif、启动文件 begin.PY和配置文件scrapy.cfg。CollegeBrif文件夹下导 人用户创建的5个文件(一init一.PY,items.PY,middle— wares.PY,pipelines.PY,settings.PY)和一个spiders文件 夹,在spiders文件夹下会创建文件一init_.PY和spider 文件gaokao.PY。自动创建的配置文件scrapy.efg的代码 如图2右框所示 、 i c .蔓I·s-id舯、叠scrapy.cfg、 (3)编写Item Pipeline存储Item数据;接着设置 setting.PY,声明pipeline.PY和item.PY,规定item的处理 middlewares.PY 类和Project路径等信息。 (4)创建运行启动文件启动爬虫程序。在与爬虫T 程同级的文件夹下创建启动文件(如begin.PY),在此文 件中输入execute(【‘.scrapy”,“crawl”,“name”])命 O ' ̄,ii20ii18.0 92谚pipelines.PY 茹se ̄ings.py 1。 塌begin.PY l” %j_Fi《l《lS《i §£ }j ■j 1 1 2 图2新建Scrapy工程CollegeSpider框架 及配置文件代码 与簟 

S0Fn帆REnEVELOPMENT&APPLIC盯ION一 -一·…- -Item数据,创建Spider文件 (2)分析定义提取的 gaokao.1)y提取hem数据 、 t rt一一, 一-·, - -gaokao—item["time”1=response.CSS(”.data text“).extractO[2].strip() gaokaoitem【|Icontents“】=response.css(“.con— _分忻各高校自主招生简章网页内容,定义提取的 Item数据(包含标题、名字、内容、表格、图片一url 等):创建Item.PY文件,其中定义类CollegeBrilftem的 tent txt p:nth—last—of—type(n+4)::text“).extract() gaokaoitem_【“table“】=response.CSS(“.con— 代码如下所示, class Collegebrifltem(scrapy.Item): title=scrapy.Field() time=scrapy.Field() contents=scrapy.Field() table=scrapy.Field() image—urls:scrapy.Field() image—path=scrapy.Field() 在爬虫FJ录spiders文件夹下创建spider文件 gaokao.PY.定义类GaokaoSpider从网站(gaokao.con1) 中提取Item信息,将scrapy.Spider子类化并定义要生成 的初始请求,可以选择如何跟踪页面中的链接,以及如 何解析下戡的贞面内容以提取数据,使用scrapy提供的 功能模块CSS可以解析}}{网页内信息 将hen]和CSS 选择器绑定到一起,直接把选择 来的数据放入Item 中 gaokao—item为item实例化埘象,存储爬取到的网 页数据,使用viehl将items内容传递到hemPipeline管 道程序pipeline.PY进行数据处理【5】。gaokao.PY爬取各高 校的门主招牛简章,其核心代码如下所示: import scrapy frOm urllib import parse frOm scrapy.http impo ̄Request frOm CollegeBrif.items impo ̄Collegebrifltem class GaokaoSpider(scrapV.Spider): name= gaokao allowed—domains=【 gaokao.com 】 start_urls=【,http://www.gaokao.COm/zzzs/zzzsjz/ 1 def parse(self.response):#获取本网页所有高校 #招生简章网址 urls=response.CSS(”.bluetd a::attr(href)“).ex- tract() for url in urls: yield Request(url。callback=self.parse det) 样爬取高校自主招生简章 def parse——detail(self,response): gaokao_item=CollegebrifltemO#item实例化 gaokao—item【.Ititle”】=response.CSS(“.zsHead a:: text”).extract fi rst(…‘) tent_txt table td::text“).extract() gaokao_item【“image—urls“】=response.CSS(”. content_txt P img::attr(src)“).extract() yield gaokao——item (3)编写一1 程爬虫C()llegeBrit 的桐天模块代 Pipeline.I1)v处理从SI:,iders 捩取的items,处婵后 以本地Json文件格式仔储Pit)(dine.I)Y定义类College— brifPipeline处理从Spiders中扶取的ilems数据;定义导 }I{ison数据的类JsonExportel’Pipline通过渊用 rapy提 供的json expoll导m j㈨n艾件;定义接收 t 数据的类 JsonWithEn(.()ItingPipeline.其代码如卜所永,通过 codecs.openO打开存储文件, r 一item()函数处理 item的函数,即同_iJ吉j item的最终太向,迎过 m的 (1umpsf1方法解析item数据I I,第一个参数必 足dit-t. 解析编码必须设置 sut---一a __False, 则巾艾解析会 乱码,最后将ison数据写入义件 class JsonWithEncodingPipeline(object):样接收json格 抖式文件 def process——item(self,item,spider): name=item[ title 】+“.json” self.file:codecs.open(name, W ,encoding=” utf-8“) lines=ison.dumps(dict(item),ensure_ascii= False1+、n self。file.write(1ines) self.file.close() return item 编写爬虫设置文件settings.PY,爬虫开始 需将 ROBOTSTXT OBEY改为FALSE, !J!lJ爬虫会很快停 掉 规定item的处理类,在setitngs.PY巾找到ITEM— PIPELINES将其注解前缀去掉,然后输入编写的Col— legeBrifPipeline路径.其核心代码如下所示: BOTNAME= CollegeBrif —SPIDERMODULES=【 CollegeBrif.spiders 】 —NEWSPlDERMODULE= CollegeBrif.spiders —ROBOTS.『)(_LOBEY=False ITEM—PIPELINES=f (下转第58页) 麓 i -_葚2衰0药18焉.0蠢9 21 、

………………………………………………………… 实用第一 智慧密集 . . . . ,, . . ,... .,, .。 . .。。 .。 。. 。 。 要进行兼容性测试,防止出现较大的失误。 3.4合理选用开发语言 成本管理是软件项目管理的一个重要组成部分,有 效地节约成本开销需要合理选择软件的开发语言。因为 程语言。 参考文献 【l】王一鸣.常用计算机编程语言和选用技巧fJ1.电 子技术与软件工程,2017,(17):151-151. 选择不同的开发语言,不仅是在软件开发和测试阶段, 【2】黎遥.计算机编程语言的分析和选用技巧探析『J]. 而且在软件交付后的维护阶段都会产生不同的成本费 用。所以,作为软件开发人员,在保证软件能够满足需 求的情况下,尽量选择开源、灵活和简便的编程语言。 电脑迷,2017,f1). [3】王吴欣,姜学东.计算机编程语言的选用技巧分析 [J】.无线互联科技,2017,(13). 4 结语 计算机软件开发本质上就是使用计算机编程语言告 诉计算机要做哪些事情.所以编程语言选用的是否适 当,会直接影响软件的用户体验。因此,在软件开始编 程之前,需要开发者了解主流计算机编程语言适合什么 领域和编程语言自身的特点,并且结合要开发软件的需 求分析、硬件和软件环境等因素,选择合适的计算机编 .【4】高霞.探讨不同编程语言对计算机应用软件开发的 影响[J].电脑编程技巧与维护,2016,345(03): 26-27. 【5】李烨,王思元.编程语言的差异对软件开发的影响 探讨lJJ.科学与信息化,2018,(16):44-45. [6】王丹.计算机应用软件开发中编程语言的选取[J]. 科技与创新,201 8,(8):5-6. .‘ LJ L— J止.i止.‘止 止.‘止 止.‘^L.§止j L. J止.i止j止j止J止j止J 上 止J止J止 址 上-.‘ 上-—S 上I— J L 0 .址 L — J L—S止 —§ L—址—‘ L—‘止.j L .‘ L.§止.‘^L— . (上接第21页) CollegeBrif.pipelines.CollegebrifPipeline2 2. 架构建工程化网络爬虫的设计实现过程。首先创建新的 Scrapy工程,分析目标网站网页需要提取的Item数据, 创建spider爬取网页数据存储在Item的实例化对象中, 再将item对象送人Pipeline中进行处理以可选择的数据 ) IMAGESURLSFIELD=“imageurls“ —__project_dir:os.path.abspath(os.path,dirnameLfile_)) I MAG ES—STORE=os.path.join(project_dir,'img ) 格式存储,接着设置setting.PY,最后创建启动文件启动 爬虫爬取网页数据存储到本地。实验结果证明基于 (4)启动爬虫程序 在CollegeSpider目录下创建启动爬虫文件begin.PY, 此文件包含execute(【”scrapy”,”crawl”,”gaokao”】) 命令:运行启动爬虫文件启动网络爬虫抓取高校自主招 生简章,爬取到各高校自主招生简章以json文件、txt Scrapy框架的4步流程可以快捷地构建专业级网络爬虫 实现定向网站数据爬取和存储。 参考文献 [1]鲁继文.基于Scrapy的论文引用爬虫的设计与实现 『J].现代计算机,2017,03(下):131-133. 文件和图片文件存放到本地磁盘,部分高校自主招生简 章文件如图3所示,. . 【2】贾棋然.基于Python专用型网络爬虫的设计及实现 【J].电脑知识与技术,2017,12:47—49. :}:l嚣  , 一 圆 缓鬻圈豳瞄镭圈圈圈圈圈豳隧蠲豳鞠圈誓豳—冒璧曼苎 :2 :!:警窑::盘皇=:2量 ’”’。。 ....…~~ 一…………………~。。。‘ [3]周显春.基于个人简历的Scrapy设计与实现【JJ. …“ : ● K} : 怒=2 瑚悯邺-町^ 佳■唯∞l奠薯帽瞳嘲钍}● 豳,l :== = 埠H瞳-已 H_—- ∞:: =嚣 : 铷-毒- t目雌—l细 现代计算机,2018,06(上):85—88. — j ……舢 I—螂H●彤 _嚆算I ∞ 埘_响吐轲哇■ l n j …砷 ^P啼’ ∞l确毒 日^ t目目I ∞l■ ■■ 翱q■弹 ∞∞坤■ ■ 啊 —哇矗啊● * l } L■一●■  删辟霸田I椭 豳■L_嘲 ∞l_ ■q椭 翻■■扣 劬_坷瞳 擅d 为l摔- 一蝴崮删啪 埘曲■■^’■ 自 ●脚 【4】彭纪奔,吴林,陈贤,黄雷君.基于爬虫技术的网 络负面情绪挖掘系统设计与实现fJ1.计算机应用 与软件,2016,33(10):9—13+71. ^w■t 抽■一,■ ■ 自由■■∞ 图3网络爬虫爬取存储在本地的部分高校 自主招生简章截图 【5]杨君,陈春玲,余瀚.基于Scrapy技术的数据采集 系统的设计与实现[J].计算机技术与发展,2018. [6 刘宇,郑成焕.基于Scr6]apy的深层网络爬虫研究 [J】.软件,2017,38(7):1l1—114. 4结语 研究了网络爬虫的工作原理和Serapy爬取并解析 结构化网页的框架原理,提出基于Serapy框架构建工 程化网络爬虫的4步流程,以高考网2018年各高校自 主招生简章爬虫构建为例,详细阐述了基于Scrapy框 .0958 ̄ '2018.一\毫-啊技焉与 


本文标签: 爬虫 网络 数据 网页 爬取