博主介绍:✌程序员徐师兄,7年大厂开发经验。全网粉丝12w+,CSDN博客专家,同时活跃在掘金、华为云、阿里云、InfoQ等平台,专注Java技术和毕业项目实战分享✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟


简介

这套系统是用 Python + Django 搭的,目标是帮咱们把广州、杭州和北京的二手房价格扒下来,然后通过酷炫的图表一键展示动态走势。后台用 Django 提供接口,前端用 HTML 搭页面,图表部分用 ECharts,数据暂时放 SQLite,结构轻巧又好上手。整个项目实战性强,新手大学生拿来做毕业设计、课程设计都很合适。

房价可视化

系统能自动爬取各大房产网站二手房最新报价,结合 Pandas 做数据清洗、聚合,再把结果喂给前端。用户一打开页面,就能看到不同城市按时间、区域、房型分类的均价折线图、柱状图,直观了解市场波动。


技术栈

技术 用途 说明
Django 后端框架 处理业务逻辑、提供 RESTful 接口
Django 文档
快速入门
SQLite 数据存储 轻量级嵌入式数据库,免安装
Pandas 数据处理 清洗、统计、聚合
Pandas 教程
PyMySQL MySQL 连接 (可选)若要用 MySQL,请安装并替换 SQLite
Requests 网络请求 发起爬虫 HTTP 请求
BeautifulSoup4 网页解析 从 HTML 中抽取房源信息
ECharts 前端可视化 折线图、柱状图、区域热力图
ECharts 入门
HTML/CSS/JS 前端页面 展示图表和交互

系统模块

整个可视化系统一共分三个核心模块:

  1. 数据采集

    • 使用 Requests + BeautifulSoup4 自动爬取指定网站的二手房列表页和详情页。
    • 加入随机 UA、延时(time.sleep(random.uniform(1,3)))和异常重试,防止被反爬。
  2. 数据处理

    • 用 Pandas 将原始爬取的字段(小区名、区域、价格、面积、发布时间等)做清洗和标准化。
    • 对空值字段赋 NaN,统一时间格式,拆分房型、楼层等;
    • 按城市+日期+区域聚合,计算每日均价、涨跌幅。
  3. 图表展示

    • 后端 Django 提供 JSON 接口 /api/price-trend?city=北京&start=2024-01-01&end=2024-05-01,返回均价时序。
    • 前端用 ECharts 画折线图、柱状图、热力图,一页多图自由切换;
    • 支持按房型筛选、按区县对比。

核心代码示例

爬虫示例(Requests + BeautifulSoup)

import random, time, requests
from bs4 import BeautifulSoup

def fetch_page(url):
    headers = {'User-Agent': get_random_ua()}
    resp = requests.get(url, headers=headers, timeout=10)
    resp.raise_for_status()
    return resp.text

def parse_list(html):
    soup = BeautifulSoup(html, 'html.parser')
    for item in soup.select('.list-item'):
        yield {
            'title': item.select_one('.title').get_text(strip=True),
            'price': item.select_one('.price').get_text(strip=True),
            'area': item.select_one('.area').get_text(strip=True),
            'detail_url': item.select_one('a')['href']
        }

# 定时拉取
for city in ['gz', 'hz', 'bj']:
    for page in range(1, 6):
        url = f'https://{city}.ershoufang.example.com/page/{page}/'
        html = fetch_page(url)
        for record in parse_list(html):
            save_to_db(city, record)
        time.sleep(random.uniform(1, 3))

数据清洗与聚合(Pandas)

import pandas as pd
from sqlalchemy import create_engine

# 连接 SQLite
engine = create_engine('sqlite:///house.db')

df = pd.read_sql('select * from listings', engine)
# 清洗
df['price'] = df['price'].str.replace('万', '').astype(float)
df['date'] = pd.to_datetime(df['date'])
df['district'] = df['title'].apply(lambda s: s.split()[1])

# 聚合计算每日均价
trend = df.groupby(['city', df['date'].dt.date]).price.mean().reset_index()
trend.to_sql('price_trend', engine, if_exists='replace', index=False)

后端接口(Django View)

from django.http import JsonResponse
from .models import PriceTrend

def price_trend(request):
    city = request.GET.get('city')
    start = request.GET.get('start')
    end = request.GET.get('end')
    qs = PriceTrend.objects.filter(city=city, date__range=[start, end]).order_by('date')
    data = list(qs.values('date', 'price'))
    return JsonResponse({'status': 'ok', 'data': data})

前端 ECharts 展示

<div id="chart" style="width: 100%; height: 400px;"></div>
<script>
fetch(`/api/price-trend?city=北京&start=2024-01-01&end=2024-05-01`)
  .then(res => res.json())
  .then(({ data }) => {
    const dates = data.map(d => d.date);
    const prices = data.map(d => d.price);
    var myChart = echarts.init(document.getElementById('chart'));
    myChart.setOption({
      title: { text: '北京二手房均价走势' },
      xAxis: { type: 'category', data: dates },
      yAxis: { type: 'value' },
      series: [{ data: prices, type: 'line', smooth: true }]
    });
  });
</script>

效果展示

登录与数据管理

登录注册

首页概览

系统首页

动态可视化

房价折线

后台管理

后台管理


源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

Python项目实战《100套》

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及文档编写等相关问题都可以给我留言咨询,希望帮助更多的人

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐