admin 管理员组

文章数量: 887021


2024年1月11日发(作者:棋牌游戏源码破解版)

ISSN1009-3044ComputerKnowledgeandTechnology第17卷第13期(2021年5月)电脑知识与技术Vol.17,No.13May2021E-mail:*************.cnComputerhttpKnowledgeandTechnology电脑知识与技术://:+86-551-6569基于Python和Scrapy框架的网页爬虫设计与实现陈皓,周传生(沈阳师范大学网络信息中心,辽宁沈阳110034)摘要:针对不同的网页数据环境设计有效的爬虫方案,更加有助于爬取信息的准度和效度。文中以Python及其Scrapy框架为基础,以贝壳网为例,通过对网站的页面源码结构进行深入分析,编写了行之有效的爬虫文件来获取目标网站信息。该设计方法可以应用到不同的多级页面信息类型网站,为基于Web的数据分析提供策略采集和分析支持。关键词:大数据;网络爬虫;scrapy框架;数据采集中图分类号:TP3文献标识码:A开放科学(资源服务)标识码(OSID):文章编号:1009-3044(2021)13-0003-03DesignandImplementationofWebCrawlerBasedonPythonandScrapyCHENHao,ZHOUChuan-sheng(NetworkandInformationCenter,ShenyangNormalUniversity,Shenyang110034,China)Abstract:Designingeffectivecrawlingstrategiesfordifferentnetworkdataennexample,thispaperanalyzesthestructureofthesourcecodeofthewebsitepagebasedonPythonanditsScrapyframeworkenvironment,andthencomposeseffectivecrawlerfilestoobtaintargetwebsiteinforma⁃ingthetypeofdifferentmulti-levelinformationwebsites,thisdesigningmethodsupportds:bigdata;webcrawler;scrapyframework;dataacquisition如今正值人工智能和物联网高速发展时期,大数据正是由于网络时代发展而衍生的必然产物,亚马逊网络服务(AWS)的大数据科学家JohnRauser给这样定义:“大数据是任何超过了一台计算机处理能力的庞大数据量”。由于它是一个体量巨大,数据类别巨大的数据集,所以如何快速从中获取有效信息正是大数据所需研究的重点问题。网络爬虫则是解决这些重点问题的关键技术中的一种。网络爬虫是一种按照一定规则,自动地抓取网络信息的程序或脚本,另外还有一些不常使用的名字:蚂蚁、自动索引、模拟程序、蠕虫[1]。从本质上来说,爬虫就是利用自动化程序从网上批量抓取我们所需要的数据。每次的判断可能会消耗较多资源和时间。1.2Scrapy框架组成及数据流向1Web爬虫设计的技术基础1.1网页抓取策略在爬取网页数据的过程中,待抓取的URL队列以什么样的顺序排列,在爬虫系统中是一个很重要的问题,因为涉及抓取页面的先后顺序,而这种决定URL排列顺序的方法,被称之为抓取策略[2]。网页的抓取策略主要分为两种:基于深度优先的遍历和基于广度优先的遍历。深度优先遍历在于能够将所有深层的URL全部找到,缺点是有可能一旦开始搜索或许会陷入永久搜索无法跳出[3-4]。而广度优先遍历的好处是降低了重复率而不用反复爬取,但页面更新后,信息的更新会不及时,并且图1Scrapy架构及数据流向Scrapy具有功能强大、爬取效率高、相关扩展组件多、可配置和可扩展程度强的爬虫框架。它基于Twisted的异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块耦合程度[5]低,可以灵活的完成各种需求。简单来说,Scrapy是一个为了爬取网站数据,提取数据而编写的应用框架。Scrapy主要组件有ScrapyEngine(引擎),Scheduler(调度收稿日期:2020-12-28基金项目:2020年辽宁省一流学科教育学建设项目(SNUJYX2020040402)作者简介:陈皓(1987—),男,辽宁沈阳人,沈阳师范大学实验师,硕士;通讯作者:周传生(1966—),男,安徽霍邱人,沈阳师范大学教授。本栏目责任编辑:王力本期推荐3

ComputerKnowledgeandTechnology电脑知识与技术器),Downloader(下载器),Spider(爬虫器),ItemPipeline(管道)。还有两个中间件:DownloaderMiddlewares(下载器中间件)和SpiderMiddlewares(爬虫器中间件),箭头代表Scrapy的数据流,数据流有引擎控制。详细架构及数据流向如图1所示。(1)ScrapyEngine:向Spider请求第一个要抓取的URL。(2)Spider:提供URL给引擎。(3)ScrapyEngine:接收到URL,交给Scheduler排序入队。(4)Scheduler:将URL处理成request给ScrapyEngine。dlewares(5)ScrapyEngine:接收到request,并通过DownloaderMid⁃Scrapy(6)给DownloaderDownloader:根下载。据request下载页面,返回response给wares(7Engine)Scrapy。Engine:接收到response,并通过SpiderMiddle⁃Scrapy(给8)SpiderSpider处理。:处理response,提取网站数据,返回结构item给(9Engine)Scrapy,如果有跟进的Engine:接收到requestitem,交给也会给ItemScrapyPipelineEngine。。(10)ItemPipeline:如有新的request交给Scheduler处理,并从第2步开始重复直到调度器没有request,引擎就会关闭本次爬虫。1.3Xpath页面解析通过Scrapy将数据从网页爬去下来之后,需要从每个网页解析并提取出数据,常用提取网页数据主要有三种方式:正则表达式、XpathBeautifulSoup和Xpath,三种方法各有千秋,本文选择于搜索Xpath来提取网页数据。XML全称文档,XML同样也适用于pathLanguageHTML,即XML文档搜索。使用路径语言,最初用Xpath页面解析的特点在于:一是Scrapy提供了简洁明了的路径选择表达式以及丰富的内建函数,用于对字符串、数值、时间的匹配。二是Xpath提供的路径表达式可以进行顺畅的序列化处理,所有想要定位的标签节点,都可以使用Xpath来选择。三是当面对比较复杂的网页源代码时,Xpath更容易对源数据进行解析,以说它是沿着路径来截取数据的,Xpath并且较之使用路径表达式可以在网页源代码中选取节点,BeautifulSoup速度更快。常用表达式如表1所示。可表1Xpath的路径表达式及其描述2Web爬虫的设计2.1爬取数据的基本流程爬取目标网站之前,首先要确定采集目标,明确采集字段的位置信息和逻辑结构。通过整体布局,需确定是否制定采集策略,如需植入采集策略,可根据源码字段的逻辑结构进行设置。其次对已确定的采集字段进行页面和源码之间的关系分析,检查采集字段所处页面位置,并依据其关系实施相应的采4本期推荐第17卷第13期(2021年5月)集方法。最后通过以上分析,选择符合该页面特点的路径表达式进行数据解析,并通过编写爬虫各功能模块来分步实现该网站的数据爬取。图2描述的是一个爬取网页数据的基本流程。图2爬虫基本流程图2.2基于Scrapy框架的目标网站数据采集为了描述本Web爬虫的具体实现,本文结合国内知名房屋交易网站贝壳网(/ershoufang/)分布说明。2.2.1确定目标实施操作之前,需确定数据目标。通过观察页面得出,列表页展示的是房屋基本信息,对应的详细信息需要进入到详情页面才可以看到。所以列表页中并没有显示全部的数据信息,如果想要提取这些数据,必须进入详情页采集。本次所采集的数据共有8个字段,列表页采集总价、单价、小区名称;详情页则采集户型、装修情况、面积和所在区域。采集策略方面,Scrapy采用后进先出队列的方式,在默认情况下该框架为深度优先遍历来爬取网页数据,但根据信息位置和逻辑结构不同,可将遍历方式更改为广度优先,具体操作需要在settings文件中设置DEPTH_PRIORITY=1完成策略更改。爬取数据时,0表示深度优先,1表示广度优先。2.2.2网站页面分析ershoufang/pg2,通过观察目标URL可以发现,第二页为:一页的内容使用第三页为:/ershoufang/pg1/ershoufang/pg3/同样可以访问,,而第所以可以得出页面是通过一个参数pn*来确定的,修改*即可以实现爬取翻页操作。在房屋信息方面,可以找到列表中总价、单价、小区名称等字段均包含在属性值为class的li标签中,所以列表页的数据可以直接采集,而详情页数据需先采集列表页中详情页的URL字段,再通过回调URL来实现采集剩余字段。2.2.3分步实现首先创建一个新的Scrapy项目建立爬虫,编码爬虫文件。系统自动生成文件时,定义的爬虫类必须继承于类,并且文件中已经提前设置好了爬虫器唯一的名字name,规定了爬虫爬取域名的范围allow_domains=[],并建立parse方法,用于获取下载的response来解析网页。通过循环遍历构造出每个页面的网址,将网址添加进start_urls列表中。然后,定义两个函数分别为parse和parse_detail用来解析列表页数据和详情页数据。在parse方法中,运用Xpath解析出列表页字段所在标签位置,同时通过relsult字典保存遍历出的本栏目责任编辑:王力

第17卷第13期(2021年5月)ComputerKnowledgeandTechnology电脑知识与技术详情页URL、小区名称、总价和单价字段,并传递下去。最后爬虫深入详情页采集其他字段,在parse方法中需使用yield来实现多级页面爬取,通过运用t()构造一个新的请求对象,使用callback参数定义回调函数,来决定使用parse_detail方法处理这次新的请求响应。本爬虫设计关键在于从列表页进入到详情页采集数据的实现。通过运用Scrapy自身并行获取的能力,运用yield发起新的请求,定义详情页URL是链接,使用meta传递item参数,并使用callback参数为这个请求添加回调函数。而parse_detail用来处理新链接的response,使用meta={‘result’:result}接收传递的字典数据(即列表页字段数据),同时解析详情页字段内容。最后使用yielditem返回item,将列表页和详情页的数据统一交给itempipeline做后续处理。图3描述的为本文所采用的基于Scrapy框架的爬虫流程图。/ershoufang/)做出了如下测试。在管道模块中运用open⁃pyxl库进行数据存储,将已经爬取到的数据保存到文件中。通过修改robots默认协议为ROBOTSTXT_OBEY=False,设置爬取速度DOWNLOAD=3,并配置相应USER_AGENT来实现数据爬取,启动爬虫命令后,会显示大量输出信息。该项目测试运行后成功获取了网站上3000多条房源的目标数据,达到了预期的爬取速度和爬取质量,打开文件可看到直观的数据信息。提取数据最后保存结果如图4所示。4结束语随着大数据在各个领域和环节的应用逐步深入与发展,各类完整及快速的数据采集技术需求更加迫切和专业,本文基于Scrapy框架对爬虫文件进行设计,根据爬取网站数据的基本流程,运用Scrapy框架强大的并行获取数据能力,完成了对贝壳网房产数据的多级页面提取,实现了对网站庞大数据信息的批量获取。参考文献:[1]王芳.基于Python的招聘网站信息爬取与数据分析[J].信息技术与网络安全,2019,38(8):42-46,57.[2]谢克武.大数据环境下基于python的网络爬虫技术[J].电子制作,2017(9):44-45.[3]杜雷,辛阳.基于规则库和网络爬虫的漏洞检测技术研究与实现[J].信息网络安全,2014(10):38-43.[4]揭秋明.基于Ajax的深层网络爬虫研究[D].武汉:中国地质大学(武汉),2013.[5]杜鹏辉,仇继扬,彭书涛,等.基于Scrapy的网络爬虫的设计与实现[J].电子设计工程,2019,27(22):120-123,132.[6]温佐承,侯帅.基于Python的网络爬虫设计与实现[J].电脑编程技巧与维护,2020(7):21-23,42.[7]柴唤友,刘三女牙,康令云,等.教育大数据采集机制与关键技术研究[J].大数据,2020,6(6):14-25[8]KausarMA,DhakaVS,wler:Areview[J].In⁃ternationalJournalofComputerApplications,2013,63(2):31-36.[9]刘智慧,张泉灵.大数据技术研究综述[J].浙江大学学报(工学版),2014,48(6):957-972.【通联编辑:代影】图3基于Scrapy框架的数据采集流程图3Web爬虫的应用示例为了测试本Web爬虫的应用效果,结合贝壳网(sy.图4示例展示本栏目责任编辑:王力本期推荐5


本文标签: 数据 爬虫 采集