博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

1、项目介绍

技术栈:
Python语言、django框架、requests库、安居客二手房数据、数据库、Echarts可视化、HTML

2、项目界面

(1)房屋信息可视化大屏分析

在这里插入图片描述

(2)后台数据管理

在这里插入图片描述

(3)数据采集

在这里插入图片描述

3、项目说明

  1. 房屋信息可视化大屏分析
    功能描述:
    该模块是项目的可视化核心部分,通过 Echarts 和 HTML 技术实现,将安居客二手房数据以直观的图表形式展示在大屏上。用户可以通过大屏快速了解房屋信息的关键指标和趋势,例如:
    房屋价格分布:通过柱状图或折线图展示不同区域的房价走势。
    房屋类型分析:使用饼图或柱状图展示各类房屋(如住宅、公寓等)的占比。
    区域房源数量:通过地图或热力图展示不同区域的房源数量分布。
    其他指标:如房屋面积、户型、楼层等信息的可视化分析。
    技术实现:
    使用 Python 的 requests 库从安居客网站爬取二手房数据。
    将数据存储到数据库中,如 MySQL 或 SQLite。
    使用 Django 框架构建后端服务,提供数据接口。
    前端通过 Echarts 进行数据可视化,结合 HTML 和 CSS 实现交互式大屏。
  2. 后台数据管理
    功能描述:
    后台数据管理模块是项目的运维核心,主要用于对爬取的二手房数据进行管理和维护。管理员可以通过该模块完成以下操作:
    数据查看:浏览数据库中存储的二手房数据。
    数据更新:手动更新或删除错误数据。
    数据导入/导出:支持将数据导出为 CSV 或 Excel 格式,或从文件导入数据。
    日志管理:记录数据爬取和更新的操作日志,便于问题排查和审计。
    技术实现:
    使用 Django 框架构建后台管理系统。
    结合 Django 的 Admin 模块快速实现数据的增删改查功能。
    数据库使用 MySQL 或 SQLite 存储二手房数据。
    提供数据导入/导出功能,支持多种文件格式。
  3. 数据采集
    功能描述:
    数据采集模块负责从安居客网站爬取二手房数据,并将其存储到本地数据库中。该模块的主要功能包括:
    定时爬取:设置定时任务(如每天或每周)自动爬取最新的二手房数据。
    增量更新:仅爬取新增或更新的数据,避免重复爬取,提高效率。
    数据清洗:对爬取的数据进行预处理,去除无效或重复数据。
    错误处理:记录爬取过程中出现的错误,便于后续排查和修复。

4、核心代码


import time

import requests
import parsel
import csv
from bs4 import BeautifulSoup


with open('安居客.csv', mode='a', encoding='utf-8', newline='') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(['标题', '户型', '面积', '朝向', '楼层', '年份', '小区名称', '小区地址', '小区标签', '总价', '单价'])


def is_null(str_):
    try:
        str_ = str_.strip()
    except:
        str_ = ''
    return str_


for page in range(1, 100):   # 51
    url = f'https://beijing.anjuke.com/sale/p{page}/?from=navigation'
    # url = f'https://chongqing.anjuke.com/sale/p{page}/?from=navigation'
    # 1. 发送请求
    response = requests.get(url=url, headers=headers)
    # 2. 获取数据
    html_data = response.text
    # 3. 解析数据
    # 网页开发基础
    # html(网页元素存储..)   css(负责好看)     js(动态效果)
    # <div class="property-content"></div>
    select = parsel.Selector(html_data)
    # soup = BeautifulSoup(html_data, 'html.parser')   #  新增

    divs = select.css('.property-content')






    # print(html_data);break; # 不要执行

# 小区地址
    correct_addresses = select.css('.property-content-info-comm-address')




    for div in divs:
        # .property-content-title-name   标题
        标题 = is_null(div.css('.property-content-title-name::text').get())
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(1) span  户型
        户型s = div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(1) span::text').getall()
        户型 = ' '.join(户型s)
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(2)  面积
        面积 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(2)::text').get())
        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(3)  朝向
        朝向 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(3)::text').get())

        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(4)  楼层
        # 楼层 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(4)::text').get())
        floor_text = div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(4)::text').get()
        # 使用is_null函数处理采集到的数据,如果没有数据则设置为空字符串
        楼层 = is_null(floor_text)

        # .property-content-info:nth-child(1) .property-content-info-text:nth-child(5)  年份
        年份 = is_null(div.css('.property-content-info:nth-child(1) .property-content-info-text:nth-child(5)::text').get())
        # .property-content-info:nth-child(2) .property-content-info-comm-name  小区名称
        小区名称 = is_null(div.css('.property-content-info:nth-child(2) .property-content-info-comm-name::text').get())

        # .property-content-info:nth-child(2) .property-content-info-comm-address  小区地址
        # 小区地址 = is_null(div.css('.property-content-info:nth-child(2) .property-content-info-comm-address::text').get())  #原始


        # 采集地址信息
        address_spans = div.css('.property-content-info-comm-address span::text').getall()
        小区地址 = ' '.join(address_spans)

        # .property-content-info:nth-child(3) span  小区标签
        小区标签s = div.css('.property-content-info:nth-child(3) span::text').getall()
        小区标签 = ' '.join(小区标签s)
        # .property-price .property-price-total .property-price-total-num  总价
        总价 = is_null(div.css('.property-price .property-price-total .property-price-total-num::text').get())
        # .property-price .property-price-average  每平方米的价格
        单价 = is_null(div.css('.property-price .property-price-average::text').get())

        print(标题, 户型, 面积, 朝向, 楼层, 年份, 小区名称, 小区地址, 小区标签, 总价, 单价)





        # 4. 保存数据
        with open('安居客.csv', mode='a', encoding='utf-8', newline='') as f:
            csv_writer = csv.writer(f)
            # print(标题, 户型, 面积, 朝向, 楼层, 年份, 小区名称, 小区地址, 小区标签, 总价, 单价)
            csv_writer.writerow([标题, 户型, 面积, 朝向, 楼层, 年份, 小区名称, 小区地址, 小区标签, 总价, 单价])

        time.sleep(1)



5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】、就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,查看下方👇🏻👇🏻

Logo

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

更多推荐