本期推荐
本栏目责任编辑:王
力
基于Python 和Scrapy 框架的网页爬虫设计与实现
陈皓,周传生
(沈阳师范大学网络信息中心,辽宁沈阳110034)
摘要:针对不同的网页数据环境设计有效的爬虫方案,更加有助于爬取信息的准度和效度。文中以Python 及其Scrapy 框架
为基础,以贝壳网为例,通过对网站的页面源码结构进行深入分析,编写了行之有效的爬虫文件来获取目标网站信息。该设计方法可以应用到不同的多级页面信息类型网站,为基于Web 的数据分析提供策略采集和分析支持。关键词:大数据;网络爬虫;scrapy 框架;数据采集中图分类号:TP3
文献标识码:A
文章编号:1009-3044(2021)13-0003-03
开放科学(资源服务)标识码(OSID ):
Design and Implementation of Web Crawler Based on Python and Scrapy CHEN Hao ,ZHOU Chuan-sheng
(Network and Information Center,Shenyang Normal University,Shenyang 110034,China)
Abstract:Designing effective crawling strategies for different network data environments can enhance the accuracy and validity of crawling information.Taking Bakclass as an example,this paper analyzes the structure of the source code of the website page based on Python and its Scrapy framework environment,and then composes effective crawler files to obtain target website informa⁃tion.Targeting the type of different multi-level information websites,this designing method supports network data analysis based on Web by acquiring and analyzing strategies.
Key words:big data;web crawler;scrapy framework;data acquisition
如今正值人工智能和物联网高速发展时期,大数据正是由于网络时代发展而衍生的必然产物,亚马逊网络服务(AWS )的大数据科学家John Rauser 给这样定义:“大数据是任何超过了一台计算机处理能力的庞大数据量”。由于它是一个体量巨大,数据类别巨大的数据集,所以如何快速从中获取有效信息正是大数据所需研究的重点问题。网络爬虫则是解决这些重点问题的关键技术中的一种。网络爬虫是一种按照一定规则,自动地抓取网络信息的程序或脚本,另外还有一些不常使用的名字:蚂蚁、自动索引、模拟程序、蠕虫[1]。从本质上来说,爬虫就是利用自动化程序从网上批量抓取我们所需要的数据。python网络爬虫书籍推荐
1Web 爬虫设计的技术基础
1.1网页抓取策略
在爬取网页数据的过程中,待抓取的URL 队列以什么样的顺序排列,在爬虫系统中是一个很重要的问题,因为涉及抓取页面的先后顺序,而这种决定URL 排列顺序的方法,被称之为抓取策略[2]。网页的抓取策略主要分为两种:基于深度优先的遍历和基于广度优先的遍历。深度优先遍历在于能够将所有深层的URL 全部到,缺点是有可能一旦开始搜索或许会陷入永久搜索无法跳出[3-4]。而广度优先遍历的好处是降低了重复率而不用反复爬取,但页面更新后,信息的更新会不及时,并且
每次的判断可能会消耗较多资源和时间。1.2Scrapy 框架组成及数据流向
图1Scrapy 架构及数据流向
Scrapy 具有功能强大、爬取效率高、相关扩展组件多、可配置和可扩展程度强的爬虫框架。它基于Twisted 的异步处理框架,是纯Python 实现的爬虫框架,其架构清晰,模块耦合程度
低,可以灵活的完成各种需求[5]
。简单来说,Scrapy 是一个为了爬取网站数据,提取数据而编写的应用框架。
Scrapy 主要组件有Scrapy Engine (引擎),Scheduler (调度
收稿日期:2020-12-28
基金项目:2020年辽宁省一流学科教育学建设项目(SNUJYX2020040402)作者简介:陈皓(1987—),男,辽宁沈阳人,沈阳师范大学实验师,硕士;通讯作者:周传生(1966—),男,安徽霍邱人,沈阳师范大学
教授。
3
本栏目责任编辑:王力
本期推荐
Computer Knowledge and Technology 电脑知识与技术第17卷第13期(2021年5月)
器),Downloader (下载器),Spider (爬虫器),Item Pipeline (管道)。还有两个中间件:Downloader Middlewares (下载器中间件)和Spider Middlewares (爬虫器中间件),箭头代表Scrapy 的数据流,数据流有引擎控制。详细架构及数据流向如图1所示。
(1)Scrapy Engine :向Spider 请求第一个要抓取的URL 。(2)Spider :提供URL 给引擎。(3)Scrapy Engine :接收到URL ,交给Scheduler 排序入队。(4)Scheduler :将URL 处理成request 给
Scrapy Engine 。(5)Scrapy Engine :接收到request ,并通过Downloader Mid⁃dlewares 给Downloader 下载。
(6)Downloader :根据request 下载页面,返回response 给Scrapy Engine 。
(7)Scrapy Engine :接收到response ,并通过Spider Middle⁃wares 给Spider 处理。
(8)Spider :处理response ,提取网站数据,返回结构item 给Scrapy Engine ,如果有跟进的request 也会给Scrapy Engine 。
(9)Scrapy Engine :接收到item ,交给Item Pipeline 。(10)Item Pipeline :如有新的request 交给Scheduler 处理,并从第2步开始重复直到调度器没有request ,引擎就会关闭本次爬虫。
1.3Xpath 页面解析
通过Scrapy 将数据从网页爬去下来之后,需要从每个网页
解析并提取出数据,常用提取网页数据主要有三种方式:正则表达式、Beautiful Soup 和Xpath ,三种方法各有千秋,本文选择Xpath 来提取网页数据。
Xpath 全称XML path Language ,即XML 路径语言,最初用于搜索XML 文档,同样也适用于HTML 文档搜索。使用Xpath 页面解析的特点在于:一是Scrapy 提供了简洁明了的路径选择表达式以及丰富的内建函数,用于对字符串、数值、时间的匹配。二是Xpath 提供的路径表达式可以进行顺畅的序列化处理,所有想要定位的标签节点,都可以使用Xpath 来选择。三是当面对比较复杂的网页源代码时,Xpath 更容易对源数据进行解析,并且较之Beautiful Soup 速度更快。
Xpath 使用路径表达式可以在网页源代码中选取节点,可以说它是沿着路径来截取数据的,常用表达式如表1所示。
表1Xpath
的路径表达式及其描述
2Web 爬虫的设计
2.1爬取数据的基本流程
爬取目标网站之前,首先要确定采集目标,明确采集字段
的位置信息和逻辑结构。通过整体布局,需确定是否制定采集策略,如需植入采集策略,可根据源码字段的逻辑结构进行设置。其次对已确定的采集字段进行页面和源码之间的关系分析,检查采集字段所处页面位置,并依据其关系实施相应的采
集方法。最后通过以上分析,选择符合该页面特点的路径表达式进行数据解析,并通过编写爬虫各功能模块来分步实现该网站的数据爬取。图2
描述的是一个爬取网页数据的基本流程。
图2爬虫基本流程图
2.2基于Scrapy 框架的目标网站数据采集
为了描述本Web 爬虫的具体实现,本文结合国内知名房屋交易网站贝壳网(sy.ke/ershoufang/)分布说明。2.2.1确定目标
实施操作之前,需确定数据目标。通过观察页面得出,列表页展示的是房屋基本信息,对应的详细信息需要进入到详情页面才可以看到。所以列表页中并没有显示全部的数据信息,如果想要提取这些数据,必须进入详情页采集。本次所采集的数据共有8个字段,列表页采集总价、单价、小区名称;详情页则采集户型、装修情况、面积和所在区域。
采集策略方面,Scrapy 采用后进先出队列的方式,在默认情况下该框架为深度优先遍历来爬取网页数据,但根据信息位置和逻辑结构不同,可将遍历方式更改为广度优先,具体操作需要在settings 文件中设置DEPTH_PRIORITY=1完成策略更改。爬取数据时,0表示深度优先,1表示广度优先。2.2.2网站页面分析
通过观察目标URL 可以发现,第二页为:sy.ke/ershoufang/pg2,第三页为:sy.ke/ershoufang/pg3,而第一页的内容使用sy.ke/ershoufang/pg1同样可以访问,所以可以得出页面是通过一个参数pn*来确定的,修改*即可以实现爬取翻页操作。在房屋信息方面,可以到列表中总价、单价、小区名称等字段均包含在属性值为class 的li 标签中,所以列表页的数据可以直接采集,而详情页数据需先采集列表页中详情页的URL 字段,再通过回调URL 来实现采集剩余字段。2.2.3分步实现
首先创建一个新的Scrapy 项目建立爬虫,编码爬虫文件。
系统自动生成文件时,定义的爬虫类必须继承于Scrapy.Spider 类,并且文件中已经提前设置好了爬虫器唯一的名字name ,规定了爬虫爬取域名的范围allow_domains=[],并建立parse 方法,用于获取下载的response 来解析网页。通过循环遍历构造出每个页面的网址,将网址添加进start_urls 列表中。
然后,定义两个函数分别为parse 和parse_detail 用来解析列表页数据和详情页数据。在parse 方法中,运用Xpath 解析出列表页字段所在标签位置,同时通过relsult 字典保存遍历出的
4
本期推荐
本栏目责任编辑:王
力
Computer Knowledge and Technology 电脑知识与技术
第17卷第13期(2021年5月)
详情页URL 、小区名称、总价和单价字段,并传递下去。
最后爬虫深入详情页采集其他字段,在parse 方法中需使用yield 来实现多级页面爬取,通过运用scrapy.Request()构造一个新的请求对象,使用callback 参数定义回调函数,来决定使用parse_detail 方法处理这次新的请求响应。
本爬虫设计关键在于从列表页进入到详情页采集数据的实现。通过运用Scrapy 自身并行获取的能力,运用yield 发起新的请求,定义详情页URL 是链接,使用meta 传递item 参数,并使用callback 参数为这个请求添加回调函数。而parse_detail 用来处理新链接的response ,使用meta={‘result ’:result}接收传递的字典数据(即列表页字段数据),同时解析详情页字段内容。最后使用yield item 返回item ,将列表页和详情页的数据统一交给item pipeline 做后续处理。图3描述的为本文所采用的基于Scrapy 框架的爬虫流程图。
图3基于Scrapy 框架的数据采集流程图
3Web 爬虫的应用示例
为了测试本Web 爬虫的应用效果,结合贝壳网(sy.
ke/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]Kausar M A,Dhaka V S,Singh S K.Webcrawler:A review[J].In⁃ternational Journal of Computer Applications,2013,63(2):31-36.
[9]刘智慧,张泉灵.大数据技术研究综述[J].浙江大学学报(工学版),2014,48(6):957-972.
【通联编辑:代影
】
图4示例展示
5
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论