SCI论文(www.lunwensci.com)
摘 要: 随着互联网的发展,网络数据覆盖了各个领域,但随着网络数据量的增加和数据格式的多样化,用户从海量数 据中获取有价值的数据变得越来越困难。目前国内外对数据采集技术进行了研究,发现通过网络爬虫技术可以自动获取网络资 源。本文以南京市二手房信息为例,设计了一个基于 Scrapy 框架的爬虫程序,对中西部部分地区的二手房信息进行抓取和存 储,最后运用 Excel 数据分析,对南京市二手房资源按区域、住房类型进行分析。结果表明,该程序能够自动采集安居客户的 住房信息,提高了用户获取信息的速度和质量,为用户数据分析提供了数据源。
关键词:Scrapy,Python,网络爬虫,大数据
Implementation of Web Crawler Capture Based on Scrapy Framework
NIE Lijuan, FANG Zhiwei, LI Ruixia
(Jinken College of Technology, Nanjing Jiangsu 210000)
【Abstract】: With the development of the Internet, network data covers various fields, but with the increase of the amount of network data and the diversification of data formats, users from the massive data to obtain valuable data becomes more and more difficult . At present, data acquisition technology is studied at home and abroad, and it is found that web crawler technology can automatically acquire network resources. This paper takes the second- hand housing information of Nanjing as an example, designs a crawler program based on Scrapy framework, captures and stores the second-hand housing information of some parts of the central and western regions, and finally uses Excel data analysis to analyze the second-hand housing resources of Nanjing according to regions and housing types. The results show that the program can automatically collect the housing information of the customer, improve the speed and quality of the user to obtain information, and provide data source for user data analysis.
【Key words】: Scrapy; Python;web crawler;big data
前言
随着信息和网络技术的快速发展,信息社会已经进 入了大数据时代,为大数据的应用提供了一种新的体 验。人们可以从这个庞大的网络中获取最新的信息,了 解行业的最新发展。随着经济的持续发展,全国的房价 近年来一直在上涨,与新房相比,二手房的价格相对较 低,因此,近年来二手房市场非常火爆。用户可以从互 联网上获取各种房屋数据,通过浏览门户网站获得所需 信息,但随着网络数据的急剧增加和数据格式的多样 化,通过这种方式查找自己所需信息变得越来越困难。
本文以二手房信息为例,设计了网络爬虫,自动从互联 网上获取二手房信息,将获取的数据存储为统一的数据 格式,挖掘出其分布、类型、面积、方位、楼层、施工 日期、单价、总价、社区为用户命名,帮助用户选择适 合自己的高性价比住房。
1 Scrapy 框架与网络爬虫相关理论
1.1 Scrapy 框架介绍
1.1.1 Scrapy 框架的优势
Scrapy 框架是基于 Python 开发的一个开源的分 布式爬虫框架,可以快速高效地获取大型网页并提取相关信息。选择这个框架的主要原因是它可以根据用户 需求完成二次开发,具有良好的可扩展性。Scrapy 框架 由 Scheduler、Downloader、Spider、Item Pipeline、 Scrapy Engine 组成。Scrapy 框架的优势主要有以下 几方面 :首先,Scrapy 作为基于 Twisted 异步调度和 处理,并发量能够根据需要灵活调节,不仅可以利用 XPath 的高可读性代替正则匹配,提升抓取速度,而 且能够实现在不同的 URL 上同时进行数据抓取,其中 Scrapy 支持的 Shell 模式增强了调试的独立性 ;其次, 中间件的配置可以通过编写 Middleware 进行自定义 ; 最后,抓取到的数据通过 Item Pipeline 的方式处理, 不仅具有很强的灵活性和便捷性,最重要的是能够根据 需要保存为多种方式。
1.1.2 Scrapy 框架的运行流程
根据 Scrapy 框架的运行流程,主要剖析 Scrapy Engine( 引擎 ) 的关键作用,首先通过调度器将 requests 对象提交至下载器 ;然后下载器会把它处理好的 response 对象提交至 spider ;接着 spider 将爬取的 URL 组装成 新的 requests 对象传回到调度器,同时实现 spider 爬 取的数据传递给 item pipelines 的异步处理 ;最后,将 存储在 scrapy_redis 中待爬取的 request 对象和已被抓 取的 request 对象同时指纹化,实现分布式的增量式爬 虫是 redis 缓存数据库优异特性。
1.2 网络爬虫
网络爬虫,又名 Web 蜘蛛和 Web 机器人,是一 种根据预处理的指令规则,独立进行 Web 信息抓取的 程序脚本 [1]。爬虫技术可以快速的采集网页上的信息并 广泛的传播,非常方便的获取网页数据,因此被广泛的 应用于搜索引擎中,以实现用户对网络数据的采集和处 理目的 [2]。此外,网络爬虫还可以应用于舆情监测与分 析、目标客户数据采集、房产信息采集等领域。爬虫的 主要工作是从网络中搜索所需的网页信息,下载用户所 需的信息,通常可以分为数据采集、数据排序和数据存 储三个模块。网络爬虫的过程可以分为三个部分 : 获取 网页、分析网页 ( 提取数据 ) 和存储数据。
1.2.1 通用爬虫
大型搜索引擎的基本原理是通过把 Web 信息采集 到本地, 从而搭建一个 Web 信息内容的镜像备份, 通 用爬虫的基本原理与此相同。通用 Web 爬虫从互联网 中抓取网页信息,这些网页信息作为建立搜索引擎索引 的重要支撑,既决定着整个引擎系统的内容丰富程度, 还体现了信息的即时性 [3]。
1.2.2 聚焦爬虫
根据特定用户需要安装的 Web 连接程序称为聚焦Web 爬虫,简称聚焦爬虫。它们对用户的需求有更清 晰的定位,而它抓取的数据完全是依据用户需要,并非 无用和复杂的信息。这种聚焦 Crawler 主要解决三个 关键问题 : 抓取 requests 的指示、网页过滤和数据收 集方法。此外,决定如何定义网络过滤算法和 URL 收 集方法的基础是指定 objects 的抓取。
随着爬虫技术的发展,出现了越来越多的爬虫框架, 其 中 基 于 Python 的 爬 虫 框 架 有 Scrapy、PySpider、 Crawley。本文以二手房信息为例,设计了基于 Scrapy- based 的爬虫程序对房屋信息进行抓取和存储,并利用 该程序对中西部城市的二手房信息进行抓取。
2 基于 Scrapy 的爬虫的设计与实现
基于 Scrapy 框架的分布式网络爬虫系统架构按功能 主要分为数据 Layer 和业务 Layer 两个模块。数据 Layer 是业务 Layer 的数据源, Scrapy 爬虫框架搭建在数据 Layer 模块, Node.js 主框架搭建在业务 Layer,流程如 下 :首先在数据 Layer 模块搭建 Scrapy 爬虫框架, 处理 爬虫 System 的调度和抓取信息数据两个任务, 并以此 extends 和重写 Spiders 类, 来实现 Data 抓取功能 ;其 次,将抓取到的 Data 存储到数据 Layer 的 MongoDB 集 群中 ;最后,业务 Layer 中的 Server 类实现服务器收 发 request 功能,并提供正向和逆向的 Ajax 交互。
2.1 网页结构分析
网页结构分析主要在于数据 Layer 的爬虫的异步调度 及数据的分析与挖掘。其中数据 Layer 主要由 Scheduler 类、Downloader 类、Parser 类和存储 Pipeline 四大模块 的七个部分 [4]。其中 Scrapy 引擎能够调用 Transaction, 是整个 System 的数据流功能实现的关键。现在要掌握 二手房的户型、面积、朝向、楼层、施工日期、单价、 总价、小区名称。通过谷歌浏览器开发工具查看 Web 结 构, 在属性类的值下的所需信息是“property-content- info”的 DIV 标签。
2.2 创建网络爬虫项目
本文通过使用 Scrapy-Redis 存储调度 Redis 的访 问请求,实现分布式任务调度和抓取功能,网页调度功 能由重写 Scrapy 引擎的 Spider 类实现,System 从调 度器中取出一个链接(URL)用于接下来的抓取 ;调度 器把 URL 封装成一个请求(Request)传给下载器 ;下 载器把资源下载下来,并封装成应答包(Response) ; 爬虫解析 Response ;解析出实体(Item), 则交给实体 Pipeline 进行进一步的处理 ;解析出的是链接(URL), 则把 URL 交给调度器等待抓取。在 PyCharm 中选择终 端 输 入 :scrapy startproject house_info command 创建一个虫项目,项目目录结构如下 :
scrapy.cfg :爬虫程序项目的概要文件。
__init__.py :爬虫项目的初始化文件,用于初始 化项目。
items.py :爬虫项目的数据容器文件,用于定义要 获取的数据。
pipelines.py :爬虫程序项目的管道文件,用于进 一步处理项目中的数据。
settings.py :爬虫程序项目的安装文件, 它包含爬 虫程序项目的安装信息。
middlewares.py :爬虫项目的中间件文件。
2.3 定义项目容器
采集策略是抓取互联网数据的关键核心,主要集中 在静态网页的数据抓取和动态网页的数据抓取。本文根 据实际需求、房型、面积、朝向、楼层、施工日期、单 价、总价、小区名称确定 item.py 文件中提取的数据。
2.4 编写爬虫
2.4.1 设置 URL
在网络爬虫运行过程中,可能存在同一页面被多次 下载的情况,不仅会延长运行时间,还会增加系统负 荷。本文通过控制 URL 下载队列中的 URL 唯一性,解 决爬取 URL 的重复性问题。本文选取南京市二手房信 息, 下载链接地址 :https://nanjing.anjuke.com/sale/ ?from= esf_list#。设计通用的 URL: https://nanjing. anjuke.com/sale/p%d/?from=esf_list。
此外,本文采用基于 Hash 算法的 MD5 压缩映射存 储,实现 URL 去重池的功能。爬取过程中, MD5 算法 能够将任意位数的字符串压缩为 128 位整数, 并映射为 物理地址,且 MD5 进行 Hash 映射碰撞的概率非常小, 几乎可以忽略不计,可以实现 URL 去重池的唯一性。
2.4.2 网页数据分辨率
Python 的请求库能够模拟通过请求库的 Get 方法 发送 Http 请求以获取 Web 内容的浏览器 URL[5]。本 网站不允许信息爬虫通过,所以要爬取网站信息需要伪 装 UA。这个模拟是谷歌浏览器,使用代码修改 settings .py 中 USER_AGENT 的值。在获得页面源后,使用页 面的 XPath 方法对页面进行分析, 使用递归思想, 结合 lxml 中的 tree() 函数, 将 Area、Orientation、Floor、Construction date、单价、总价分别存储在定义的变 量中。此外, 在 Parse (Self, Response) 方法中创建项 目对象,用代码将项目对象提交到 Pipeline。
2.4.3 数据存储与测试
在爬虫项目中,数据的存储、读取是必不可少的 环节,而 Scrapy 持久化有两种存储形式,一种是基于 终端指令的存储,只能将解析方法的返回值存储在本 地文本文件中。持久存储的文本文件类型只有 :'json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle',方法 简单,高效,方便。另一种是基于管道的存储,它是通 用的,但编程繁琐。最后对该 Scrapy 框架下的网络爬 虫的网页抓取进行了测试。
3 结语
本文设计并实现了基于 Scrapy 框架的网络爬虫程 序对南京市二手房房屋进行爬虫抓取。利用本文设计的 爬虫程序,能够在短时间内自动获取大量的房屋信息。 本文设计的爬虫程序不局限于对二手房信息的获取,也 适用于对不同城市住房市场的动态数据抓取,帮助用户 掌握住房市场现状的同时,预测其发展趋势,然后并做 出合理的选择。基于 Scrapy 框架的分布式网络爬虫系 统相较传统单机网络爬虫系统,提升了网络爬虫的抓取 效率和运行稳定性。此外,当抓取数据较多时,实现对 网站数据的多线程并行抓取,建立分布式爬虫能够更快 速地处理海量数据。
参考文献
[1] 张小秋.基于Scrapy框架的网络爬虫分析与抓取实现[J].电 脑编程技巧与维护,2022(2):18-19+44.
[2] 欧阳元东.基于Scrapy框架的网站数据抓爬的技术实现[J]. 电子制作,2020(Z2):49-50+29.
[3] 王嘉宝,雒伟群.基于Scrapy框架的电影数据爬取和可视化 分析[J].西藏科技,2022(2):64-68.
[4] 黄雨辰,童彤.基于Scrapy爬虫框架下电商数据分析[J].安阳 师范学院学报,2021(5):132-136.
[5] 杜鹏辉,仇继扬,彭书涛,等.基于Scrapy的网络爬虫的设计 与实现[J].电子设计工程,2019.27(22):120-123+132
关注SCI论文创作发表,寻求SCI论文修改润色、SCI论文代发表等服务支撑,请锁定SCI论文网!
文章出自SCI论文网转载请注明出处:https://www.lunwensci.com/jisuanjilunwen/52696.html