基于大数据的房价数据爬虫与可视化分析预测系统
Posted Python极客之家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于大数据的房价数据爬虫与可视化分析预测系统相关的知识,希望对你有一定的参考价值。
1. 项目背景
房地产是促进我国经济持续增长的基础性、主导性产业,二手房市场是我国房地产市场不可或缺的组成部分。由于二手房的特殊性,目前市场上实时监测二手房市场房价涨幅的情况较少,影响二手房价的因素错综复杂,价格并非呈传统的线性变化。
本项目利用Python实现某一城市二手房相关信息的爬取,并对爬取的原始数据进行数据清洗,存储到数据库中,通过 flask 搭建后台,分析影响二手房房价的各类因素,并构建递归决策树模型,实现房价预测建模。
2. 二手房信息网络爬虫
二手房信息爬虫流程为,先爬虫该市所有在售楼盘,以保定市为例,其基础 url 为:
http://https//baoding.anjuke.com/community/p1/
其中,p1 表示分页的页码,因此可以构造循环,抓取所有分页下的楼盘数据。
base_url = https://baoding.anjuke.com/community/p/
all_xqlb_links = set()
for page in range(1, 51):
url = base_url.format(page)
# 获取 html 页码,并进行dom解析
# ...
通过分析 html 页面的 Dom 结构,利用 Bootstrap 进行解析,获取楼盘的详细字段信息。
同理,获取楼盘下所有在售房源信息:
获取每套在售二手房详细信息:
def get_house_info(house_link):
"""获取房屋的信息"""
headers =
accept: */*,
accept-encoding: gzip, deflate, br,
accept-language: zh-CN,zh;q=0.9,en;q=0.8,
cookie: aQQ_ajkguid=7C0DF728-2DD3-AEF7-5AE1-AAC7E82D8A60; id58=CocHKmGeUbtvnzYfKtAIAg==; _ga=GA1.2.440545268.1637765564; 58tj_uuid=77fb0a86-cfab-4a4f-aa63-e2e4a69731fa; als=0; cmctid=772; sessid=A3E31958-F652-4014-B26C-87EE93EFE667; ctid=14; fzq_h=a9b2d7c26e6521ef071ae84068ac5aa0_1637996216214_75db448315884028ab128221dd4077c8_47901717218226362245370512298064674903; twe=2; new_uv=2; _gid=GA1.2.1381332738.1637996382; wmda_uuid=d437ad68fb26624a80f2670595ea2c0d; wmda_session_id_6289197098934=1637996411733-36806473-f8b4-a246; wmda_visited_projects=%3B6289197098934; new_session=0; utm_source=; spm=; fzq_js_anjuke_xiaoqu_pc=ac0887cb147cd4ba84155189391aa497_1637996809340_24; init_refer=https%253A%252F%252Fbeijing.anjuke.com%252Fcommunity%252Fprops%252Fsale%252F51651%252Fp5%252F; _gat=1; obtain_by=2; fzq_js_anjuke_ershoufang_pc=138af2c9eed465b9859e227d331d33ea_1637997414151_25; xxzl_cid=eb195336df074605b844f558d2dac96b; xzuid=9e6e0d0a-9d5d-4401-99f3-f7c206e85d52,
referer: house_link,
sec-fetch-dest: empty,
sec-fetch-mode: cors,
sec-fetch-site: same-origin,
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36
response = requests.get(house_link, headers=headers)
response.encoding = utf8
soup = BeautifulSoup(response.text, lxml)
house_info =
链接: house_link,
产权性质: 未知,
房屋类型: 未知,
产权年限: 未知,
房本年限: 未知,
唯一住房: 未知,
参考首付: 未知,
发布时间: 未知,
总价: ,
单价: ,
房屋户型: 未知,
所在楼层: 未知,
建筑面积: ,
装修程度: 未知,
房屋朝向: 未知,
建造年代: 未知,
配套电梯: 无,
所属小区: 未知,
所在位置: 未知
tbody = soup.select(tbody.houseInfo-main)[0]
tds = tbody.select(td)
for td in tds:
datas = td.text.split( )
if 产权性质 in datas[0]:
house_info[产权性质] = datas[0].replace(产权性质, )
if 产权年限 in datas[0]:
house_info[产权年限] = datas[0].replace(产权年限, )
if 发布时间 in datas[0]:
house_info[发布时间] = datas[0].replace(发布时间, )
if 唯一住房 in datas[0]:
house_info[唯一住房] = datas[0].replace(唯一住房, )
if 房屋类型 in datas[0]:
house_info[房屋类型] = datas[0].replace(房屋类型, )
if 房本年限 in datas[0]:
house_info[房本年限] = datas[0].replace(房本年限, )
if 参考预算 in datas[0]:
yusuan = datas[0].replace(参考预算, )
house_info[参考首付] = yusuan[2:].split(,)[0]
total_price = soup.select(span.maininfo-price-num)[0]
total_price = total_price.text.strip()
house_info[总价] = total_price
avgprice = soup.select(div.maininfo-avgprice-price)[0]
avgprice = avgprice.text.strip()
house_info[单价] = avgprice
huxing = soup.select(div.maininfo-model-item.maininfo-model-item-1)[0]
huxing = huxing.text.strip()
house_info[房屋户型] = huxing.split( )[0]
house_info[所在楼层] = huxing.split( )[1]
daxiao = soup.select(div.maininfo-model-item.maininfo-model-item-2)[0]
daxiao = daxiao.text.strip()
house_info[建筑面积] = daxiao.split( )[0]
house_info[装修程度] = daxiao.split( )[1]
chaoxiang = soup.select(div.maininfo-model-item.maininfo-model-item-3)[0]
chaoxiang = chaoxiang.text.strip()
house_info[房屋朝向] = chaoxiang.split( )[0]
house_info[建造年代] = chaoxiang.split( )[1].split(/)[数据分析实战—北京二手房房价分析