计算机毕业设计Hadoop+Spark+Hive租房推荐系统 贝壳租房数据分析 租房爬虫 租房可视化 租房大数据 大数据毕业设计 大数据毕设 机器学习

news/2024/4/29 8:35:30/文章来源:https://blog.csdn.net/spark2022/article/details/136999192

毕业技术方向调查表

姓名:    李昌福    

课题方向

房无忧房屋租赁平台

开发语言:     

Java       

 前端框架:

VUE

数据库:

MySQL

服务器端

框架:

SpringCloud

其他技术:

Hadoop、HDFS

方向意义

结合四年在校所学专业知识,针对如今人们对住房需求提升的问题,进行调研和分析,并利用Java、VUE、SpringCloud等技术开发XX房屋租赁平台,解决人们找房难、出租难的问题,并提供数据分析结果便于用户对房源及租期进行合理的规划。

预设

业务逻辑

模块一:租客用户模块

   功能点1:用户注册和登录

   功能点2:查看在租房屋的具体房源信息(时间,所在位置,大小等)

   功能点3:向房东提出看房请求 

   功能点4:对已租房屋向房东发起退租请求

   功能点5:查看租房历史,并可对其进行增删改查

模块二:房东用户模块

   功能点1:用户注册和登录

   功能点2:发布房源具体信息(包括图片、文字、视频等)

   功能点3:查阅看房请求(所对应的租客信息、时间、请求的房源)

   功能点4:管理看房请求(可对其接受或拒绝)和退租请求

模块三:管理员模块

   功能点1:管理员注册和登录

   功能点2:查看平台租客、房东权限和信息,并可对其进行管理

   功能点3:查看平台的房源内容,并有权限对其进行增删改查

   功能点4:发布平台公告,返回公告已确认信息

模块四:报障模块

   功能点1:租客发现故障,进行报障申请

   功能点2:房东查看对应租客未处理的故障

   功能点3:房东收到报障申请,开始处理已报故障

   功能点4:发布故障处理流程和处理结果反馈

模块五:数据导出及分析模块

   功能点1:将用户数据导出为MR平台数据文件 

   功能点2:允许用户基于HDFS分布式平台进行数据管理

   功能点3:允许用户基于Hadoop集群进行数据处理

   功能点4:处理数据,得出看房请求的最大值,请求量与时间的关系

   功能点5:处理并分析租客年龄信息,对比各年龄人群租房的偏好

   功能点6:输出数据成为数据库文件,供数据展示平台使用

技术或业务逻辑特色

核心算法代码分享如下:

from selenium import webdriverfrom selenium.webdriver.common.by import By
from lxml import etree
import time
from selenium.webdriver.chrome.options import Options
import pymysql
import re
import json#一线城市租房信息
#cities = ['bj','sh','gz','sz']
cities = ['sz']
options = Options()
driver = webdriver.Chrome(executable_path=r'chromedriver.exe', options=options)def get_url_info(url):driver.get(url)#driver.set_page_load_timeout(60)time.sleep(40)driver.refresh()driver.minimize_window()zufang = driver.find_element(By.XPATH,'/html/body/div[3]/div[1]/div[1]/div/div[1]/div[1]/span[1]/a')zufang.click()#driver.close()driver.switch_to.window(driver.window_handles[-1])time.sleep(1)page_source = driver.page_source;hs = etree.HTML(page_source)nums = driver.find_element(By.XPATH, '//*[@id="pager_wrap"]/div[@class="pager"]/a[@class="next"]/preceding-sibling::a[1]/span').textif nums and len(nums)>0:end = int(nums)else:end = 20;for j in range(0,end+1):ep_logs = hs.xpath('//ul[@class="house-list"]/li/@ep-log')imgs = hs.xpath('//ul[@class="house-list"]/li[@ep-log]/div[@class="img-list"]/a/img/@src')urls = hs.xpath('//ul[@class="house-list"]/li[@ep-log]/div[@class="des"]/h2/a/@href')decs = hs.xpath('//ul[@class="house-list"]/li[@ep-log]/div[@class="des"]/h2/a/text()')prices = hs.xpath('//ul[@class="house-list"]/li[@ep-log]/div[@class="list-li-right"]/div[@class="money"]/b/text()')danweis = hs.xpath('//ul[@class="house-list"]/li[@ep-log]/div[@class="list-li-right"]/div[@class="money"]/b/following-sibling::text()')next = driver.find_element(By.XPATH,'//*[@id="pager_wrap"]/div[@class="pager"]/a[@class="next"]')length = len(ep_logs)for i in range(0,length):data = {}dec = decs[i].split('|')json_obj = json.loads(ep_logs[i])print( json_obj['houseid'] )#data['id'] = json_obj['houseid'] #房间ID#if not_exists(houseid=data['id']):if not_exists(houseid= json_obj['houseid'] ):data['pic'] = imgs[i] #房间图片链接data['url'] = urls[i] #房间URL链接data['house_title'] = dec[1].strip() #房间标题data['rent_way'] = dec[0].strip() #租房模式data['house_pay'] = ''.join([prices[i],danweis[i].strip()]) #价格time.sleep(3)driver.get(data['url']) #进入详情页ps_inner = driver.page_sourcehs_inner = etree.HTML(ps_inner)pay_way = hs_inner.xpath('//span[@class="instructions"]/text()')#pay_way = hs_inner.xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[1]/div/span[2]/text()')#type_str = hs_inner.xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[1]/ul/li[2]/span[2]/text()')type_str = hs_inner.xpath('//ul[@class="f14"]/li[2]/span[2]/text()')#floor_str = hs_inner.xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[1]/ul/li[3]/span[2]/text()')floor_str = hs_inner.xpath('//ul[@class="f14"]/li[3]/span[2]/text()')# estate = hs_inner.xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[1]/ul/li[4]/span[2]/a/text()')estate = hs_inner.xpath('//ul[@class="f14"]/li[4]/span[2]/a/text()')# areas = hs_inner.xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[1]/ul/li[5]/span[2]/a[1]/text()')areas = hs_inner.xpath('//ul[@class="f14"]/li[5]/span[2]/a/text()')addresses = hs_inner.xpath('//span[@class="dz"]/text()')#addresses = hs_inner.xpath('/html/body/div[3]/div[2]/div[2]/div[1]/div[1]/ul/li[6]/span[2]/text()')#times = hs_inner.xpath('/html/body/div[3]/div[1]/p/text()')times = hs_inner.xpath('//div[@class="house-title"]/p/text()')agents = hs_inner.xpath('//*[@id="vipAgent"]/div[1]/p[1]/a/text()')disposals = hs_inner.xpath('//ul[@class="house-disposal"]/li[not(@class="no-config")]/text()')spots = hs_inner.xpath('//ul[@class="introduce-item"]/li[1]/span[2]/em/text()')#descs = hs_inner.xpath('//ul[@class="introduce-item"]/li[2]/span[2]/em/text()')descs = hs_inner.xpath('//ul[@class="introduce-item"]//li[3]/span[2]/text()')print(descs)if pay_way and len(pay_way)>0:data['house_pay_way'] = pay_way[0]if type_str and len(type_str)>0:type_str = type_str[0]types = type_str.split("\xa0\xa0")if types and len(types)==3:data['house_type'] = types[0]data['house_area'] = types[1].split(' ')[0]+"平"data['house_decora'] = types[2]elif types and len(types)==2:data['house_type'] = types[0]data['house_area'] = types[1]elif types and len(types)==1:data['house_type'] = types[0]if floor_str and len(floor_str)>0:floor_str = floor_str[0]floors = floor_str.split("\xa0\xa0")if floors and len(floors) == 2:data['toward'] = floors[0]f = floors[1].split('/')if f and len(f) == 2:data['floor'] = f[0]data['floor_height'] = f[1]elif f and len(f) == 1:data['floor'] = re.findall('\d{1,2}',f[0])[0]+'层'elif floors and len(floors) == 1:data['toward'] = floors[0]if estate and len(estate)>0:data['house_estate'] = estate[0].strip()if areas and len(areas)>0:data['area'] = areas[0]if addresses and len(addresses)>0:data['address'] = addresses[0].strip()if times and len(times)>0:times = times[len(times)-1].strip()data['time'] = times.split('\xa0')[0]print("时间:"+data['time'])if agents and len(agents)>0:data['agent_name'] = agents[0].strip()if disposals and len(disposals)>0:data['house_disposal'] = ' '.join(disposals).strip()if spots and len(spots)>0:data['house_spot'] = ' '.join(spots)if descs and len(descs)>0:data['house_desc'] = descs[0]print(data)to_mysql(data)driver.back()time.sleep(1)next.click()def not_exists(houseid):"""信息写入mysql"""table = 'house_info'db = pymysql.connect(host='localhost', user='root', password='123456', port=3396, db='model')cursor = db.cursor()sql_search = "SELECT COUNT(1) FROM {table} where id = {id}".format(table=table,id=houseid)cursor.execute(sql_search)data_sql = cursor.fetchall()count = data_sql[0][0]if count > 0:print('exists')return Falsereturn Truedef to_mysql(data):"""信息写入mysql"""table = 'house_info'keys = ', '.join(data.keys())values = ', '.join(['%s'] * len(data))db = pymysql.connect(host='localhost', user='root', password='123456', port=3396, db='model')cursor = db.cursor()sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)try:datas = data.values()if cursor.execute(sql, tuple(datas)):print("Successful")db.commit()except:print('Failed')db.rollback()db.close()if __name__ == '__main__':for i in cities:url = 'XXXXX'%iget_url_info(url)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1028079.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML网站的概念

目录 前言: 1.什么是网页: 2.什么是网站: 示例: 3.服务器: 总结: 前言: HTML也称Hyper Text Markup Language,意思是超文本标记语言,同时HTML也是前端的基础&…

二叉树初阶数据结构C

文章目录 一、树的概念及结构?1.树的概念2.树的相关概念3.树的表示4.树在实际生活的应用(表示文件系统的目录树结构) 二、二叉树的概念及结构1.概念2.特殊的二叉树3.二叉树的性质4.二叉树的存储结构 三、二叉树链式结构的实现(顺序结构之前讲…

maven 依赖机制

安全工程师为啥关注maven依赖 log 4j事件之后,大家开始更加关注开源组件安全漏洞这个事。纷纷引入SCA 软件成分分析工具来识别项目中存在的开源组件和漏洞。 在sca工具扫描之后,会报出一大堆组件,review这个事就是安全团队投入时间来研判了…

解锁未知领域:探索Web3技术的无限可能性

随着数字化时代的持续发展,Web3技术作为下一代互联网的重要组成部分,正呈现出无限的创新可能性。本文将深入探索Web3技术所带来的无限可能性,揭示其在各个领域的应用前景和潜力。 1. 区块链技术的革命性 Web3的核心是区块链技术,…

C++商品库存管理系统

第一章 需求分析 1.1程序设计任务 1.1.1总体要求 运用面向对象程序设计知识,利用C语言设计和实现一个“库存管理系统设计”,主要完成对商品的销售、统计和简单管理。在实现过程中,需利用面向对象程序设计理论的基础知识,充分体现…

Webpack常见插件和模式

目录 目录 目录认识 PluginCleanWebpackPluginHtmlWebpackPlugin自定义模版 DefinePlugin的介绍 ( 持续更新 )Mode 配置 认识 Plugin Loader是用于特定的模块类型进行转换; Plugin可以用于执行更加广泛的任务,比如打包优化、资源管理、环境变量注入等 …

【zlm】问题记录:chrome更新引起的拉不出webrtc; 证书校验引起的放几秒中断

目录 chrome更新引起的拉不出webrtc 证书校验引起的放几秒中断 chrome更新引起的拉不出webrtc 【zlm】最新的chrome版本中的报错: 我有个问题event.js:8 [RTCPusherPlayer] DOMException: Failed to execute setRemoteDescription on RTCPeerConnection: Failed …

Java前端控制器模式

文章目录 以下是Java前端控制器模式的主要组成部分和工作原理:组件与角色:工作流程:应用场景与优势: Java Web应用程序示例 Java前端控制器模式是一种软件设计模式,它在构建基于Java的Web应用程序时特别有用&#xff0…

如何使用 ArcGIS Pro 制作三维建筑

三维地图已经逐渐成为未来地图的趋势,对于大范围应用,只需要普通的建筑体块就行,如果有高程数据,还可以结合地形进行显示,这里为大家介绍一下 ArcGIS Pro 制作三维建筑的方法,希望能对你有所帮助。 数据来…

使用seldom编写http接口用例

在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。 seldom 中参数化的用法非常灵活,这里仅介绍file_data() 的N种玩法。 二维列表 当参数比较简单时可以试试下面的方式。 参数化数据 {"…

老阳推荐的视频号项目是真的吗?能赚钱吗?

在当下数字化、信息化的社会背景下,视频号项目如雨后春笋般涌现,成为许多人关注的焦点。特别是在一些知名人士,如老阳的推荐下,这些项目更是受到了广泛的关注和讨论。那么,老阳推荐的视频号项目是否真实存在?它能否真…

uni-app(使用阿里图标)

1.注册阿里矢量图标库 注册阿里图标库账号并登录,https://www.iconfont.cn/ 2.加入购物车 搜索适合自己的图标,加入购物车,如下图: 3.加入项目 我的->资源管理->我的项目->创建项目,然后返回购物车&#…

cesium vue 绘制标记实体(撒点),监听鼠标左击事件

添加实体 const viewer new Cesium.Viewer(cesiumContainer, {})viewer.entities.add()查看实体 const viewer new Cesium.Viewer(cesiumContainer, {}) const billboard viewer.entities.add({...})viewer.zoomTo(billboard)删除实体 根据实体删除 if (billboard.value…

快速上手Spring Cloud 六:容器化与微服务化

快速上手Spring Cloud 一:Spring Cloud 简介 快速上手Spring Cloud 二:核心组件解析 快速上手Spring Cloud 三:API网关深入探索与实战应用 快速上手Spring Cloud 四:微服务治理与安全 快速上手Spring Cloud 五:Spring …

目标检测+车道线识别+追踪

一种方法: 车道线检测-canny边缘检测-霍夫变换 一、什么是霍夫变换 霍夫变换(Hough Transform)是一种在图像处理和计算机视觉中广泛使用的特征检测技术,主要用于识别图像中的几何形状,尤其是直线、圆和椭圆等常见形状…

C++从入门到精通——函数重载

函数重载 前言一、函数重载概念二、函数重载的分类参数类型不同的函数重载参数个数不同的函数重载参数类型顺序不同的函数重载 三、函数重载的具体代码展示main.cpp 四、为什么为什么C支持函数重载,而C语言不支持函数重载呢 前言 函数重载是指在同一个作用域内&…

argo rollout使用

一、前言 argorollout是比argocd更高级的发布工具,其中包含自动化金丝雀发布、自动化蓝绿发布、还可以通过argo命令或者dashboard查看发布的过程 二、使用 需要先部署argo rollout服务 参考:https://github.com/argoproj/argo-rollouts/tree/master/m…

微信小程序的页面制作---常用组件及其属性2

一、标签栏taBar 在全局配置文件app.json中添加taBar配置,可实现标签栏配置。标签栏最少2个,最多5个 (1)如何配置标签栏? 1》先建多个文件,(以我的index,list,myform文…

RelayAttention:让大型语言模型更高效地处理长提示符

一、前言 虽然大型语言模型 (LLM) 近年来取得了非常显著的进展,也在各种自然语言处理任务中展现出强大的能力。然而,LLM 的在实际的应用落地层面也面临着一些实际挑战,其中之一就是效率和成本问题,导致了在垂直行业实际落地的应用…

CE-Net:用于2D医学图像分割的上下文编码器网络

CE-Net:用于2D医学图像分割的上下文编码器网络 摘要引言方法 【2019】CE-NetContext Encoder Network for 2D Medical Image Segmentation 摘要 医学图像分割是医学图像分析中的重要步骤。随着卷积神经网络在图像处理中的快速发展,深度学习已经被用于医…