基于Scrapy框架爬取租房网站数据及可视化分析

收藏关注不迷路


前言

  如今这个大数据时代,面对网络上浩如烟海的信息,如何从中提取有效信息成为问题。本文基于Scrapy框架以杭州链家网租房信息为对象,爬取租房信息,其中为突破爬虫封锁采用IP代理池、布隆去重等多种方法。同时将数据存储于数据库,并利用Pandas清洗数据。最后将数据利用Flask和Echarts在前端以图表的形式输出,并分析得出杭州租房面积和金额的分布,房源大多集中在余杭区和萧山区,租房价格滨江区最贵、租房楼层一般是高楼层等结论,为租客提供参考。
关键词:Scrapy;网络爬虫;反爬虫;URL去重;数据可视化

一、功能介绍

  本课题着眼于大数据互联网时代下的信息获取以及数据可视化分析,以杭州链家网中的租房信息为研究对象,利用Scrapy框架实现链家网租房信息爬虫并爬取数据,利用MySQL数据库作为前端和采集的枢纽存储数据。对于原始数据还需要对数据进行分析和处理,除去数据中的脏数据并规范化数据以方便后面的数据可视化。最后将数据用图表的方式输出,对租客有一定的指导作用,让其能更明确地去寻找租房信息。

二、开发环境

开发语言:Scrapy, scrapy框架
软件版本:python3.7/Scrapy
数据库工具:Navicat11
开发软件:PyCharm/vs code

————————————————

三、系统总体结构设计

本系统将大致分为四个模块,数据采集模块、数据存储模块、数据处理模块、数据可视化模块,如图4-1所示。数据采集模块负责爬取链家网数据;数据存储模块负责存储采集的数据;数据处理模块负责将采取的原始数据进行规范化、量化处理,为后续的数据可视化打下基础;数据可视化模块负责提供一个web平台将数据用图形化的手段展示给用户。

在这里插入图片描述

图4-2 链家网杭州租房主页面

4.2 数据采集模块

首先要明确需要爬取的网页的结构,链家网上杭州租房的主页面如图4-2所示,第一个红框中显示了杭州的各个行政区,第二个红框显示了价格分段。根据对于网站结构的分析发现,当房屋数量过多时,网页只能显示前100页的数据,所以为了全面抓取数据,需要对于网页进行分类抓取。其链接结构可以表示为"https://hangzhou.lianjia.com/zufang/"+区域+pg+价格区间,本文将根据区域加上价格分段的形式进行分类爬取。

在这里插入图片描述

4.2.1设置实体Item

Item是保存爬取到的数据的容器,可以更加方便地操作和保存爬取的数据,其使用方法和python字典类似,并且提供了额外的保护机制来避免拼写错误导致的未定义字段错误。可以在item.py中利用Scrapy.Field()定义所需要
爬取的字段,ZufangItem类的定义如图4-3所示:
在这里插入图片描述

4.2.2 网页抓取

网页抓取的主要实现是在spiders文件夹下的lianjia.py中实现,是爬虫的核心部分,为了实行全站爬取,本文用CrawlSpider进行每个小分类下的翻页处理。CrawlSpider类是Spider的一个子类,Spider类只能爬取start_urls列表中的网页,如果要继续爬取只能手动发送请求,但是CrawlSpider类定义了一些规则来提供跟进link的方便机制,让它更加适合全站爬取。相对于Spider,CrawlSpider有了新的方法和属性,其中LinkExtractors(链接提取器)用于提取链接,rules(规则解析器)可以包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了特定的操作。
  我们在这里定义了继承自CrawlSpider类的LianjiaSpider类,其主要代码如图4-4所示:
  在这里插入图片描述

4.3 数据存储模块

在数据存储模块中,我们使用到了MySQL数据库进行数据存储。首先要保证安装了MySQL,接着需要安装数据库可视化管理工具,以方便数据的管理,本文使用的是HeidiSQL。数据存储模块对接Scrapy框架的pipeline管道,在管道进行数据存储之前,需要在MySQL中建立好对应的数据库和表来存放管道传递过来的数据。
  新建一个数据库lianjia,并在其中建表hangzhou来存放爬取的原始数据,其表的结构如图4-6所示:
  在这里插入图片描述

图4-6 表hangzhou的结构
这样,再通过Scrapy中的pipeline就可以实现数据存入MySQL。

四、可视化页面展示

(1)杭州租房价格和面积散点图
  杭州租房价格与面积的散点关系如图5-3所示,数据大部分集中于面积0-300㎡和价格0-10000元这个区间,基本遵从面积越大,价格越高的原则。其中大于400平方的可能是商业用途的房屋。
在这里插入图片描述

图5-3 杭州租房价格和和面积散点图
(2)杭州各区租房数量及均价图
  杭州各区租房数量以及其均价如图5-4所示,在租房数量上以余杭区和萧山区最多,同时它们的价格相较其他也较低,因为它们离市中心较远。在房屋均价上,滨江区是最高的,它是杭州的高新开发区,网易、阿里、海康、大华等众多公司坐落于此,所以这里的租房需求很大,这应该是是滨江区房屋均价如此之高的原因之一,推荐如果上班地方在滨江,可以选择附近萧山区住房。

在这里插入图片描述

图5-4 杭州各区租房数量及均价
(3)杭州租房面积区间直方图
  杭州租房面积的分布如图5-5所示,可以看到60-90㎡的房子是最多的,30-60㎡的小户型也十分受欢迎。
  在这里插入图片描述

图5-5 杭州租房面积区间直方图
(4)杭州楼层高度分布图
杭州出租房屋的总楼层如图5-6所示,其中以高楼层(20以上)为主,低楼层房屋出租的比较少。

在这里插入图片描述

图5-6 杭州楼层高度分布图
(5)杭州租房户型分布图
杭州租房的户型分布如图5-7所示,最常出现的户型是3室2厅2卫,2室1厅1卫,一般是与人合租。
在这里插入图片描述

图5-7 杭州租房户型分布图
(6)杭州租房热词图
  提取链家网房源的标题,利用jieba分词进行处理,统计词频,最后生成词云图如图5-8所示,发现为了吸引租客的注意,房主一般会使用精装、随时看房、近地铁等标签[31]。
  在这里插入图片描述

图5-8 杭州租房热词图
(7)整体显示
最后将这些图表集合在一张HTML页面中,如图5-9所示:

在这里插入图片描述

图5-9 整体显示

结论

当今时代是数据的时代,每天都产生大量的数据,现在人们的烦恼不再是无处获取信息,而是信息太多,如何从中提取有用的信息。同时,由于房价的高涨,现在年轻人都选择租房,面对浩如烟海的租房信息如何准确地获取自己想要的,这成为一大问题。所以本文提出了基于Scrapy框架爬取租房网站数据及可视化分析的研究(以链家网杭州的租房信息为对象)。主要工作如下:
(1)详细介绍Scrapy框架,数据库存储,URL去重相关理论知识。
(2)通过Scrapy框架实现对数据的爬取,并针对网站的反爬虫机制详细介绍了5种应对方法以及具体实施代码。
(3)对数据进行预处理,并成功利用Flask和Echarts在前端展示。

目 录

摘要1
Abstract1
1引言2
1.1 研究背景及意义2
1.2 研究现状2
1.3 研究内容3
1.4 论文结构3
2网络爬虫相关技术介绍4
2.1 网络爬虫概述4
2.2 Scrapy框架介绍5
2.2.1 Scrapy框架结构5
2.2.2 Scrapy框架中的数据流6
2.2.3 Scrapy执行流程6
2.3 数据库存储7
2.3.1 MySQL7
2.3.2 Redis7
2.4 URL去重7
2.4.1 Scrapy原生去重模块7
2.4.2 Scrapy-Redis原生去重模块8
2.4.3 Bloom Filter算法9
2.5 本章小结9
3基于Scrapy框架破除爬虫封锁11
3.1 降低请求频率11
3.2 伪装成随机浏览器11
3.3 机器人协议12
3.3.1 机器人协议概述12
3.3.2 机器人协议示例12
3.3.3 基于Scrapy绕过机器人协议13
3.4 禁用Cookie13
3.5 IP代理池13
3.5.1 代理服务器概述13
3.5.2 基于Scrapy创建IP代理池14
3.6 本章小结17
4系统的设计与实现18
4.1 系统总体结构设计18
4.2 数据采集模块18
4.2.1 设置实体Item19
4.2.2 网页抓取20
4.2.3 数据持久化21
4.2.4 URL去重优化22
4.2.5 突破反爬虫限制22
4.3 数据存储模块22
4.4 数据处理模块23
4.4.1 缺失值处理23
4.4.2 异常值处理23
4.4.3 数据整理24
4.5 数据可视化模块24
4.5.1 Flask框架的基础使用25
4.5.2 可视化的图表25
4.6 本章小结25
5系统测试27
5.1 测试环境27
5.2 测试结果27
5.2.1 数据展示27
5.2.2 可视化页面展示27
6总结与反思32
6.1 总结32
6.2 反思32
参考文献33
致谢35

猜你喜欢

转载自blog.csdn.net/QQ2743785109/article/details/134101930