基于 Scrapy框架的二手房数据爬取原理与实现

(整期优先)网络出版时间:2020-09-11
/ 2

基于 Scrapy框架的二手房数据爬取原理与实现

杨超

山东工业职业学院 山东淄博 255000

摘 要:大数据时代已经到来,数据已经渗透到当今各行各业的职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用需求,预示着新一波生产率增长和消费者盈余浪潮的到来。本文正是利用基于Python编程的Scrapy框架设计的简捷、高效二手房房屋信息爬取工具,实现了对58同城网站下二手房信息的自动爬取,在大量数据信息中获取所需要的有效信息,并将有效信息保存到MySQL数据库中,从而建立二手房信息资源库,以便于后期数据信息价值的挖掘和使用。

关键词:Python;Scrapy框架;爬虫;数据库

1 引言

在人们传统的观念中,拥有属于自己的房子才算拥有了一个安定的家。购房是一笔不小的支出,相比于热门区域的高价新房,更多人选择了房价较低,周边配套成熟的二手房作为自己的首选。为了获取更多二手房房源信息,人们将互联网作为了搜索和了解具体房源信息的重要平台。

目前国内常用的二手房房源网站多以58 同城、安居客、我爱我家、链家网等为主,为购房者选购心仪住房提供了大量房源。由于各网站多以关键字搜索配合条件筛选的方式为购房者提供房源搜索功能,搜索出来的信息中含有大量冗余信息,难以精确获取房源有效信息,因此,我们以58同城网站二手房房源信息为例,采用基于Python的Scrapy框架技术,精确爬取房屋有效数据,并将存储到数据库中,形成数据资源库,便于后期信息的进一步挖掘和处理。

2 Scrapy爬虫框架简介

Scrapy是一个基于Python编写的快速、高层次的屏幕抓取和Web抓取框架,用于抓取Web站点并从页面中提取结构化的数据,是目前爬虫框架中使用频率最高的。Scrapy使用Twisted异步网络库来处理网络通信,并且包含了各种中间件接口,可以灵活地完成各种需求。

25f5b3942194a8_html_d34e5b2401f44e4f.png
.1 爬虫框架组成

图1 Scrapy整体架构图

从图1可以看到Scrapy框架主要包括五大组件。

    • Scrapy Engine(Scrapy引擎)为框架核心,负责处理整个系统的数据流,并在相应动作下触发事件。

    • Scheduler(调度器)负责接收引擎发来的请求,加入队列中,并在引擎再次发来请求时返回该请求。我们可以将调度器看成一个URL的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址。

    • Downloader(下载器)负责获取网页内容并将网页内容返回给爬虫。

    • Spiders(爬虫)负责从特定网页中提取自己需要的信息。

    • Item Pipeline(项目管道)负责处理从网页中提取的数据。当页面被爬虫解析后,数据将被发送到项目管道,并经过几个特定的次序进行处理或者与数据库连接并将数据导入。

各组件负责各自功能,彼此间通过特定中间件完美的组合在一起,实现了数据爬取、数据分析、数据保存等功能。

2.3 框架中数据流运行过程

当启动 Scrapy 项目时,Scrapy Engine打开一个网站,找到处理该网站的Spider并向其请求第一个要爬取的URL地址。获取第一个URL后,通过Scheduler与Requests进行调度以请求下一个要爬取的URL。Scheduler的URL队列中按照先进先出的顺序把URL地址交给Downloader去网络上下载数据,并生成Response对象数据送到Spider中。Spider中的相应方法会自动调用并对爬取的数据进行解析,将解析出来的数据封装到Item中,封装后的数据送到Item Pipeline中进行数据过滤或者存储等。当执行到scheduler 中的 URL队列为空时,Scrapy Engine关闭该网站,scrapy 就结束工作了。

3 基于Scrapy框架的爬取技术实现

58同城不仅是一个信息交互的平台,更是一站式的生活服务平台。我们个人或者房产中介可以将房屋信息挂到58同城网站进行销售,为购房者提供了更多的房源信息。

接下来我们将利用Scrapy框架,从 https://zb.58.com/ershoufang/中爬取房源数据,并存储到数据库中。

3.1 Scrapy爬虫框架的安装(win10平台)

我们在CMD命令窗口中通过pip安装Scrapy框架,部分电脑会遇到错误提示error:Microsoft Visual C++ 14.0 is required,我们按照错误提示安装相应的插件即可。

3.2 Scrapy框架的使用

使用该框架实现网站数据的爬取,我们将其分为6个步骤分别是创建项目、创建spider类文件、创建Item容器类、解析Response信息、项目管道数据处理和执行爬取命令进行爬取信息等。

在CMD命令行下输入scrapy startproject second_hand_house命令来创建名称为second_hand_house项目。项目文件结构如图2所示。

5f5b3942194a8_html_a3022e3fed3313a7.jpg
2 项目结构图

接下来我们通过cd second_hand_house进入项目文件,在项目中通过scrapy genspider tongcheng zb.58.com创建了名为tongcheng的Spider类文件,爬取范围为https://zb.58.com网站。

S5f5b3942194a8_html_1bc35278f922d12.jpg
crapy 框架提供了 items 类对象,用于管理和规范数据,从非结构化的数据源中提取结构化数据。我们用代码编辑软件打开项目文件中items.py,封装爬取的房屋信息,详细代码如图3所示。

图3 item封装信息

爬取功能的代码都在tongcheng.py文件中,其中主要做的两件事是定义抓取网站的动作和分析爬取下来的网页。tongcheng.py文件定义了TongchengSpider类,定义爬取的第一个URL地址,在parse()方法中解析Response数据并封装到Item中。通过分析网站HTML源代码,使用.CSS方式从HTML网页源代码中将位于

  • 标签下的
  • 标签内房屋的相关信息提取出来,通过yield item语句将解析出来的Item数据送到Item Pipeline项目管道中对其进行进一步处理。爬取多个页面时,我们使用yield语句调用Request方法进入下一个URL地址。

    3.3 爬取数据保存到数据库

    通过前面Scrapy框架部分的设计,我们已经实现了网站信息的爬取,为了方便后期对数据的处理,我们将爬取的数据进行保存,在这里我们使用MySQL数据库。先在MySQL中创建数据库,并创建相关数据表。

    在pipelines.py文件中导入pymysql模块,通过编写创建连接、创建游标、操作数据库、提交操作、关闭游标和连接等程序代码完成Scrapy框架与MySQL的连接。在执行爬取命令前记得到settings.py文件中开启ITEM_PIPELINES功能,否则数据无法正常导入。

    最后我们在CMD命令行下执行scrapy crawl tongcheng爬取命令。在数据库中查询爬取结果如图4所示。

    5f5b3942194a8_html_f9a483f1907e086d.jpg
    4 部分爬取结果

    4 结束语

    本案例结合人们实际需求,利用Scrapy框架+MySQL数据库爬取了58同城网站中的二手房信息,并将其保存到数据库中,方便了我们后期对数据的筛选和处理,解决了在庞大数据信息中如何快速提取有效信息的问题。该爬取静态网页内容的方法设计简单、易于实现,具有较强通用性,如果需要爬取更加复杂的数据,只需在相应的组件中添加相关代码即可。

    参考文献:

    [1]丁辉.Python基础与大数据应用[M].北京:人民邮电出版社,2020:154-157.

    [2]陈燕.基于Scrapy爬虫框架的安居客租房数据爬取[J].轻工科技,2019,35(9):74-75.

    [3]欧阳元东.基于 Scrapy 框架的网站数据抓爬的技术实现[J].电子制作,2020,392:49-50.