在线房源识别系统-毕设项目(一篇拖更一年的博客)

在线房源识别系统-毕设项目

项目背景:

随着我国流动人口的不断增多,网络租房市场快速发展,当前网络房屋成千上万,数据纷杂,很多信息是重复的,还有一些信息属于虚假房源。租客租房前会由于缺乏了解而造成不必要的麻烦,为了给租客提供简明、可靠的房源信息,本课题对网络房源的重复度和真实性进行分析研究,提出合理的度量标准和解决方案,并设计开发出具有实用价值的在线房源识别系统。
本系统利用爬虫技术爬取房产中介网站的二手房信息,并对大量网络房源的重复度和真实性进行分析研究,得出合理且真实有效的优质房源数据。在房源展示方面,用户能够通过输入关键字进行可靠房源搜索,也可直接根据地域选择推荐的优质房源进行查看,还可以根据大数据分析结果进行房源筛选,使租客们更快的选取心仪房源。

前言

写在前面: 现在是2021年9月,20届毕业的我毕设项目感觉自己完成的还不错,之前打算趁热打铁更新到git上;这是一篇本来2020年7月就该存在的博客,因为本人拖延症太严重,当时觉得应该立马记录下来,由于入职啊工作啊这样那样的事儿导致今天才发现自己还有个一年没完成的事情,费尽千辛万苦找到了当时的代码和文档,凭借一点点记忆在此记录,为什么隔了一年还要干这个事儿呢,一方面可以自己留作纪念,另一方面可供大家参考。代码已上传至github这是个链接,可根据本文自行探索~

项目构成

系统结构总共分为两个模块,如图所示,其中数据获取及数据模块由两部分构成:node爬虫程序为数据分析奠定基础提供数据源,Python数据分析程序结果则作为第一个模块的输出;信息展示及数据接口模块同样由两部分组成,后端编写接口为前端保障增删改查的数据来源,前端接收数据展示所有信息。
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第1张图片
其中Reptile模块负责大数据的获取,产生系统所需的源数据,Data analysis模块用于接收源数据并清洗数据,分析数据得到系统所需的优质房源数据,interface模块用于提供系统数据支持,属于接口服务,view则主要呈现推荐房源各项信息,作为视图展示模块,数据的流动性由database模块支持,数据的存储和查找均使用到该模块。
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第2张图片
分别对应4个程序模块:爬虫,数据库,数据分析程序,展示项目(前端展示程序+服务器代码)

项目技术

讲下概览,后文会对于每个模块我会细讲~源码都在前面Git地址里找就可。
数据存储:mysql数据库(.sql文件)

直接导入SQL文件

数据来源:node爬虫(house_Reptile)

node pachong.js 启动爬虫程序

数据分析:Python 数据分析(Listing-analysis.ipynb是分析房源的,watch.ipynb是获取到另外三个表数据的,统计用)

导入集成环境直接查看运行

页面展示:node服务端+vue前端(house_server+house_page)
开发流程:数据来源由爬虫程序爬取网页源数据,存到数据库,进行数据分析对比后再写入新的数据库表,作为数据源开发了一个展示系统,系统效果如下;

npm i 安装所需依赖:
// 服务端启动:npm start
// 前端启动:npm run dev

推荐房源,首页由搜索房源的头部信息栏、搜索框组件、推荐房源、查看房源预览和底部版权信息栏构成,是一个标准的租房网站首页。


房源展示:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第3张图片
搜索房源:

城市房源图表预览:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第4张图片

数据库表的设计

共由5个表构成,其中houses为爬虫数据存放房源信息表;数据完成清洗和分析后存入house表;而watch0为分析过程中重新创建的记录不同城市不同地区房源每平米单价及房源数量等信息;watch1则为地区房源和楼层分布情况;watch2记录地区房源与户型分布情况。watch系列三张表作为数据可视化的数据表,提供租房概览。
数据库模型图:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第5张图片
houses表:共18个字段,字段说明如下:houseId表示房源id作为主键,city为城市标识符,dist为地区地区字段,flag为房源整租在售标志,title为房源名称。address表示小区地址,price表示租房价格,size为房源大小,direction为朝向,style为房屋格局,floor表示楼层,resource为房源来源,time表示维护时间,tag为房源特殊说明,href为房源链接详情,pic存放房源图片,reality为房源真实性,recommend为房源推荐度字段。
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第6张图片
house表 :共18个字段,存放清洗后的房源数据,与houses字段相同,唯一不同则为该表数据按照recommend字段排序所得:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第7张图片
watch0表 :共计5个字段,用于存放地区房源分布与每平米单价分布,id作为主键唯一标识,city为城市代码,dist存放地区,perprice存放每平米单价,counts记录数量:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第8张图片
watch1表:共计4个字段,用于存放地区房源楼层分布,id作为主键唯一标识,city为城市代码,floor存放楼层,counts记录数量:
watch1表
watch2表:共计4个字段,用于存放地区房源户型分布,id作为主键唯一标识,city为城市代码,name存放户型名称,value记录数量
watch2表

爬虫程序部分

主要完成爬取数据方面工作,使用node爬虫技术爬取自如网和链家网租房网站的房源信息,程序中重点用到三个模块:1、request是用来请求网页的。2、cheerio,这个模块的用来解析网页的dom结构。3、mysql用来连接mysql数据库。为了扩大数据量,可以收集不同地区的房源信息,适当修改了爬虫爬取不同地点租房信息的URL,使其成为一个变量,爬取前可对应地点爬取不同数据。针对价格和面积两个字段进行了数据处理,让其进入数据库为数据字段,以便后续数据分析和清洗功能的实现。
爬虫相关可执行程序部分截图:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第9张图片
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第10张图片

数据分析及清洗程序

数据清洗及数据分析:(该部分在jupyter-notesbook中完成),制定了数据清洗标准,并完成清洗功能,导入数据至jupyter-notesbook,本部分可以下载anaconda集成环境,将两个.inpynb文件导入jupyter-notesbook里查看:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第11张图片计算关键字段reality步骤:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第12张图片
删除重复数据程序截图
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第13张图片
检测数据分布情况程序截图:

四分位布展法异常值清洗,房源真实性度量程序并删除异常值程序截图:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第14张图片
按照推荐度排序:

房源概览筛选:根据房源全部信息筛选和计算相关值,租房全览表由三个表组成,分别由相关属性的不同值组成,筛选数据过程如图:
筛选地区分布:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第15张图片
楼层分布:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第16张图片
筛选户型分布:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第17张图片

后端接口搭建

利用node+express+MySQL开发后端服务器接口,主要包括服务器搭建,数据库查询,能够提供房源识别系统的基本数据支持。传统后端服务器都是由Java实现的,而本系统使用到node.js搭建的服务器,使用的是express路由框架。代码在house_sever内。

前端页面搭建

使用vue脚手架搭建的前端界面工程,最大的特点为双向数据绑定,作为数据驱动模型的框架使用。
前端工程化技术有利于提高开发效率,前端界面主要用作房源推荐展示,查看所有房源,查看房源概览,查看详情和搜索匹配等功能,通过路由Vue-router进行页面之间跳转,路由配置所示:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第18张图片
axios请求模块:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第19张图片

成果展示

爬虫程序爬取贝壳网租房信息,爬取到六千余条数据,爬取结果存入数据库houses表中,成果展示:


数据分析结果由两部分构成,一是得到清洗后的房源源数据存入house表中:

第二部分则为将house结果根据需求筛选后,补充数据至watch0,watch1,watch2表:
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第20张图片
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第21张图片
在线房源识别系统-毕设项目(一篇拖更一年的博客)_第22张图片

写在最后

项目模块就这么多啦,完成这篇近万字的博客的时候,我该正式给自己的学生生涯告个别啦,虽然迟了一年,但是希望对大家有所帮助~毕设是个很有意思的过程,希望每个毕业生都能写出好的毕设项目!本文所有文字以及代码均为原创,如商用请注明出处,有任何问题欢迎指正!

你可能感兴趣的:(vue.js,项目,爬虫,python,big,data)