Python实战中如何实现房价数据采集与分析

来源:图像处理网作者:又改需求头衔:程序员
导读:本期聚焦于小伙伴创作的《Python实战中如何实现房价数据采集与分析》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python实战中如何实现房价数据采集与分析》有用,将其分享出去将是对创作者最好的鼓励。

Python在数据采集和数据分析领域有非常广泛的应用,房价数据采集与分析是其中比较实用的场景,通过编写简单的脚本就能获取公开的房价信息并完成基础分析,为房产决策提供参考。

Python实战中如何实现房价数据采集与分析

房价数据采集实现

采集房价数据首先要确定目标网站,这里以公开的房产信息页面为例,使用requests库发送HTTP请求获取页面内容,再用BeautifulSoup解析页面提取需要的字段。

请求与解析依赖安装

首先需要安装两个核心库,执行以下命令即可:

pip install requests beautifulsoup4

数据采集代码示例

以下代码实现了从目标页面提取小区名称、单价、总价、面积四个核心字段的功能:

import requests
from bs4 import BeautifulSoup
import time

# 目标页面URL,这里使用本地测试地址示例
url = "http://127.0.0.1:8080/house_list"
# 设置请求头模拟浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

def fetch_house_data():
    try:
        # 发送GET请求
        response = requests.get(url, headers=headers, timeout=10)
        # 设置编码避免乱码
        response.encoding = "utf-8"
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, "html.parser")
            # 假设房价信息在class为house-item的div标签中
            house_items = soup.find_all("div", class_="house-item")
            result = []
            for item in house_items:
                # 提取小区名称
                community = item.find("span", class_="community").text.strip()
                # 提取单价,去除单位
                unit_price = item.find("span", class_="unit-price").text.strip().replace("元/平", "")
                # 提取总价,去除单位
                total_price = item.find("span", class_="total-price").text.strip().replace("万", "")
                # 提取面积,去除单位
                area = item.find("span", class_="area").text.strip().replace("平", "")
                result.append({
                    "community": community,
                    "unit_price": float(unit_price),
                    "total_price": float(total_price),
                    "area": float(area)
                })
            return result
        else:
            print(f"请求失败,状态码:{response.status_code}")
            return []
    except Exception as e:
        print(f"采集过程出现异常:{e}")
        return []

if __name__ == "__main__":
    data = fetch_house_data()
    print(f"共采集到{len(data)}条房价数据")
    # 简单打印前两条数据
    for i in data[:2]:
        print(i)
    # 避免请求过于频繁
    time.sleep(1)

房价数据分析实现

采集到原始数据后,需要使用pandas库对数据进行清洗和分析,先安装pandas库:

pip install pandas

数据清洗与基础统计

以下代码实现了数据转成DataFrame、处理异常值、计算核心统计指标的功能:

import pandas as pd

def analyze_house_data(raw_data):
    # 转成DataFrame格式
    df = pd.DataFrame(raw_data)
    print("原始数据前5行:")
    print(df.head())
    
    # 数据清洗:去除单价为0或者总价为0的异常数据
    df = df[(df["unit_price"] > 0) & (df["total_price"] > 0)]
    print(f"清洗后剩余{len(df)}条有效数据")
    
    # 基础统计:计算单价、总价的均值、中位数、最大值、最小值
    print("单价统计指标:")
    print(df["unit_price"].describe())
    print("总价统计指标:")
    print(df["total_price"].describe())
    
    # 按小区分组计算平均单价
    community_avg = df.groupby("community")["unit_price"].mean().sort_values(ascending=False)
    print("各小区平均单价(降序):")
    print(community_avg)
    
    return df

if __name__ == "__main__":
    # 假设这里是之前采集到的数据
    test_data = [
        {"community": "阳光小区", "unit_price": 35000, "total_price": 280, "area": 80},
        {"community": "幸福家园", "unit_price": 42000, "total_price": 336, "area": 80},
        {"community": "阳光小区", "unit_price": 36000, "total_price": 252, "area": 70},
        {"community": "和平小区", "unit_price": 30000, "total_price": 270, "area": 90},
        {"community": "幸福家园", "unit_price": 41000, "total_price": 287, "area": 70}
    ]
    analyze_house_data(test_data)

分析结果存储

分析完成后的数据可以存储为CSV文件方便后续使用,代码如下:

def save_analyzed_data(df, file_path="house_analysis_result.csv"):
    # 存储为CSV文件,编码设置为utf-8-sig避免中文乱码
    df.to_csv(file_path, index=False, encoding="utf-8-sig")
    print(f"分析结果已保存到{file_path}")

if __name__ == "__main__":
    # 承接上面的分析代码
    test_data = [
        {"community": "阳光小区", "unit_price": 35000, "total_price": 280, "area": 80},
        {"community": "幸福家园", "unit_price": 42000, "total_price": 336, "area": 80},
        {"community": "阳光小区", "unit_price": 36000, "total_price": 252, "area": 70},
        {"community": "和平小区", "unit_price": 30000, "total_price": 270, "area": 90},
        {"community": "幸福家园", "unit_price": 41000, "total_price": 287, "area": 70}
    ]
    df = analyze_house_data(test_data)
    save_analyzed_data(df)

注意事项

  • 采集数据时要遵守目标网站的robots协议,不要频繁发送请求给服务器造成压力
  • 如果目标页面有反爬机制,可以适当增加请求间隔,或者添加代理IP配置
  • 分析数据前一定要做清洗工作,避免异常值影响统计结果的准确性
  • 公开的房价数据可能存在滞后性,分析结果仅作参考,不能作为实际交易的直接依据

Python房价数据采集房价数据分析pandasrequests修改时间:2026-06-11 11:48:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。