python爬取全国房价并分析

  • 使用方法
  • 程序原理
    • 数据来源
    • 数据爬取
      • mac下mysql安装&使用&创建库和表
      • 网站爬取分析
      • 网站数据抓取代码基础
    • 数据分析

我相信国内房价一直都是苦逼程序员比较关注的事情,我也非常关注全国部分地区的房价,因此我最原始的需求就是想看看全国都哪些地方房价比较高,以及几个我比较关注的城市房价都是怎么个涨势。关于这两个功能,我并没有打算做很漂亮的应用,所以实现的思路也很简单粗暴,但它可以满足我的基本的需求。如果你也有需要,我们可以一起来完善这个应用,让他更通用。

使用方法

我说了我并没有打算做很漂亮的应用,目前这个项目也只是可以满足我的基本需求,因此本项目稍微需要一点编程基础和mysql操作基础。至少要入门水平,然后就可以照着下面的步骤操作了:

  1. 安装依赖: pip install -r requirements.txt
  2. 安装mysql并设置密码然后进入后执行下面命令:
create database house DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use house;
CREATE TABLE residential (record_id INT NOT NULL AUTO_INCREMENT,province VARCHAR(100) NOT NULL,city VARCHAR(100) NOT NULL,year YEAR NOT NULL,month TINYINT UNSIGNED, # DEFAULT 1price DOUBLE, # NOT NULL, 单位: 元/m^2url VARCHAR(100),PRIMARY KEY (record_id)
); 
  1. 爬取房价数据到数据库(方便后期分析): python clawer.py
  2. 房价数据分析: 简单阅读修改 price_analyse.py 文件的内容后运行 python price_analyse.py 即可。

程序原理

数据来源

最初有这个需求的时候我就百度搜了一下有没有现成的房价数据可以直接分析,很可惜并没有找到,但是发现了下面这个网站:

http://www.creprice.cn/

简单的分析了一下网站的结构,发现它的数据非常好爬!于是马上决定就是它了。

ps. 代码见光后应该很快就不能这么轻易爬了,如果爬的人多的话…该网站的反爬机制及将上线,到时候再…嗯,道高一尺魔高一丈/笑脸。

数据爬取

房价相关数据抓取下来怎么存呢?鉴于网站的房价数据现在可以轻易爬下来并不代表将来也可以轻易爬,为了保险起见还是决定先保存到数据库方便后期深入分析了。数据库需要什么结构呢?说实话我只是关心 在哪个省的哪个城市什么时候房价是多少,于是很自然的我的数据表包含了如下列: 省市/城市/年/月/房价 等几个关键数据。

下面首先介绍数据库的操作基本流程(windows用户需要自己适配用法了,关键步骤请看代码注释),然后介绍如何爬取该网站的房价信息,其实都很简单。

mac下mysql安装&使用&创建库和表

  1. 安装mysql:
brew install mysql
mysql.server start # 手动启动
mysql.server stop # 手动停止
mysql -uroot # 默认没有密码, 登录后设置
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('xyz123');
mysql -u root -p 'xyz123' # 登录
  1. mysql基本操作:
mysql -u root -p # xyz123
# show databases;
create database house DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; # drop database house
use house;
# 创建和删除
CREATE TABLE residential (record_id INT NOT NULL AUTO_INCREMENT,province VARCHAR(100) NOT NULL,city VARCHAR(100) NOT NULL,year YEAR NOT NULL,month TINYINT UNSIGNED, # DEFAULT 1price DOUBLE, # NOT NULL, 单位: 元/m^2PRIMARY KEY (record_id)
); 
# drop table residential;
# 表查看
show tables;
describe residential;
# 表修改
ALTER TABLE residential ALTER COLUMN month SET DEFAULT 1; # 修改字段默认值, COLUMN 可省
ALTER TABLE residential MODIFY price DOUBLE NOT NULL; # 设置字段非空
ALTER TABLE residential ADD desc_info VARCHAR(100); # 增加字段
ALTER TABLE residential CHANGE desc_info drop_col VARCHAR(100) NOT NULL; # 修改列名
ALTER TABLE residential DROP drop_col; # 删除字段
ALTER TABLE residential ADD url VARCHAR(100); CREATE TABLE test (record_id INT NOT NULL AUTO_INCREMENT,province VARCHAR(100) NOT NULL,city VARCHAR(100) NOT NULL,year YEAR NOT NULL,month TINYINT UNSIGNED, # DEFAULT 1price DOUBLE, # NOT NULL, 单位: 元/m^2url VARCHAR(100),PRIMARY KEY (record_id)
); # 数据增改查删
INSERT INTO residential(province ,city, year, price) VALUES('guizhou','guiyang',1992, 45000);
UPDATE residential SET province='GZ' WHERE province='guizhou';
SELECT * FROM residential;
DELETE FROM residential WHERE province='GZ';
DELETE FROM residential; # 删除全部数据

网站爬取分析

房价数据网站首页: http://www.creprice.cn/

手动查看房价信息的操作流程分析:

  1. 打开 http://www.creprice.cn/naprice/funation.html 网站(可以注册登录:手机号+简单密码)
  2. 点击任意省份,然后右边的查看更多,发现地址很有规律:http://www.creprice.cn/proprice/pcguangxi.html 前面都相似,后面就是[pc+省份全拼], 可以以此来爬取全国各省数据(几个直辖市略有区别,具体参考项目的代码实现)。
  3. 任何一个地址又分为 住宅/办公/商铺 相关的页面,地址分别也只是最后不一样: pcguangxi.html/pcguangxi-ty21.html/pcguangxi-ty22.html。我当前只关注住宅的所以就只实现了爬取住宅的代码,其他的有需求时再说吧。
  4. 任何一个页面都包含时间选择和展开更多选项,但是展开的通常都没有实际数据。而其中时间对应的也是静态页面后缀,在上面的.html前加上日期即可,例如 -ti201512.html 遍历以上一些地方应该可以获取比较合理的数据结构了。

由此得到爬取流程:获取中国各省的汉字,然后生成各个省市的拼音,组合生成的年月相关字串,组装成网址;然后到该网址中找到城市名字和对应的房价,保存到数据库。

网站数据抓取代码基础

其实我也是边百度边尝试的,有些库我也没用过,都是百度后从库的基本使用去了解如何满足自己的需求,比如百度python 汉字转拼音 才知道还有pinyin这种库可以用。

  1. 全国各省的汉字数据: https://github.com/baixuexiyang/geocoord
  2. 汉字转拼音:pip install pinyin
from pinyin
>>> print(pinyin.get('你 好'))
nǐ hǎo
>>> print(pinyin.get('你好', format="strip", delimiter=" "))
ni hao
>>> print(pinyin.get('你好', format="numerical"))
ni3hao3
>>> print(pinyin.get_initial('你好'))
n h
  1. 省份网址生成器:
def gen_all_url():for pr in PROVINCE_NAME:for year in range(NOW.year, 2007, -1):for month in range(12, 0, -1):pr['url'] = "%s/proprice/pc%s-ti%d%02d.html" % (BASE_URL, pr['pinyin'], year, month)pr['year'] = yearpr['month'] = monthyield pr
  1. 网页下载器:
import requests
res = requests.get('http://www.creprice.cn/proprice/pcguizhou-ti201803.html')
with open('test.html','w') as f:f.write(res.text)

其实我也没想到这个网站的爬取这么简单,连基本的反爬机制都没有,那我就只能不客气了!
5. 异步爬虫:没想到猴子补丁支持了requests但是对于mysql的支持并不好,而且这个网站动不动就被爬爆了。所以最后没有采用异步的方式。

最后爬取的过程大概是下面这样(看起来比较慢,爬完全部数据大概要3小时吧):
这里写图片描述

数据分析

  1. 数据读取: 数据库读取操作,获取数据后就直接查询数据库就好了,没什么技术含量。
  2. 绘制房价的温度图: 参考代码,效果如下,是全国2018年房价的温度图。

房价温度图

可以看出来除了北上广深杭以外,国内还有重庆/辽宁/吉林的房价都挺高的。更多信息大家就自己感受一下吧…

  1. 绘制趋势线型图: 参考代码,效果如下,是几个城市的房价上涨趋势。

房价长势图

这个图也说明了国内大部分省市的房价都是在上涨的,就我看的几个城市而言,从2017年1月开始都普遍大幅度上涨(当时到底发生了什么?),从上涨的趋势来看这几个城市都应该还有一定的上涨空间。如果要买房的话,可以考虑在那儿呢?—fuck…当然时看看在哪儿才买得起啊!

上面的两个图也只是举个例子啦,分析结果也就是我个人的简单直观的看法,相信大家看到的比我看到的多,期待听到大家深入浅出的分析结论。

源代码地址: https://github.com/HeLiangHIT/house_price

最后在这个过程中我也发现了一个关于租房数据自动爬取的项目,感兴趣的可以围观下。
ps. 这个项目看起来比我这个麻烦多了,毕竟要适配多家中介机构的网站,维护起来应该也比较辛苦。

如果本文对你有所帮助,可以点赞以支持作者的持续更新哦

支持作者

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

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

相关文章

爬虫 58同城房价信息 高德的接口进行房价地图绘制

爬虫部分 // An highlighted block def main():base_url1 https://hz.58.com/xinfang/loupan/all/pbase_url2 /?PGTID0d0091a8-0004-f055-d9b7-c447c3e1c187&ClickID1date_list []for i in range(1,34):html ask_url(base_url1str(i)base_url2)bs BeautifulSoup(htm…

安居客西安房源爬取 + pyecharts 数据展示

第一步是数据爬取: import xlwt from bs4 import BeautifulSoup from selenium import webdriver import time,random from selenium.webdriver import ChromeOptionsdef main():baseurl "https://xa.fang.anjuke.com/loupan/all/p"datalist getData(b…

看我如何抓取最新房价数据

经过前几年一轮房价大涨,到现在因为国家大力调控等原因,市场已经褪去热度,正在慢慢变得稳定,价格也相较最高时下降了些。那现在房价到底怎样?接下来又会是怎样的发展的趋势?这里我们就可以通过 Python 把最…

python爬取上海链家网二手房数据

1、数据爬取说明 1.1 爬取目的 一个朋友在学习自考,作业是爬取数据进行数据分析,正好最近我在学习python,所以他委托我帮他完成这一工作 1.2使用模块 requests进行网络请求、bs4进行数据解析、xlwt进行excel表格存储 2、网页结构分析 2.…

购房选址分析之上海市

一日不见,如隔三秋。快过年了,凌晨GIS给大家拜个早年,提前祝大家新年快乐,牛气冲天! 上期我们用矢量分析中的缓冲区分析和叠加分析的方法对长沙市的购房选址方面的问题进行了探讨,得到了许多小伙伴的回应&a…

链家全国房价数据分析 : 数据分析及可视化

相关文章:链家全国房价数据分析 : 数据获取 上一回我们提到了用爬虫爬取链家的新楼盘和二手房数据信息,这回我们来看看如何对他们进行分析。 新楼盘数据分析 因为我们爬的时候是一个个城市爬的,现在我们要把他们合在一起&#x…

大数据统计租房市场现状(上海篇)

对某方面有统计需求的同学可以留言哟~O(∩_∩)O~!!! 数据下载时间:20170620 房间均价:为了对比1房,2房,3房哪个比较划算引入的概念。一条出租信息中,平均每个房间的价格&#xff0c…

链家全国房价数据分析 : 数据获取

最近一直在看论文,也有很久没有coding了,感觉对爬虫的技术有些生疏,我觉得即使现在手头没有在做这方面的东西,经常爬点对技术保鲜还是很重要的。所以这次我打算爬链家的房价数据,目的主要是对爬虫和Python的东西作一个…

上海二手房网站

文章目录 简介git总体架构开发目录 简介 业务目标:实现上海二手房全量数据动态更新、统计、汇总展示,了解二手房变化趋势。 技术目标:前端到后端技术的demo。前身:租房网站。毕业2年需求变更:租房->买房… git 前…

上海的二手房价有所下跌,现在你们的工资够买间厕所了吗?Python帮你分析上海的二手房价

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者:林小呆 仪表板展示 项目背景 去面试的时候被问上海二手房的一些情况,作为一个土著,我只知道上海这个区…

上海二手房价数据分析

目的:本篇给大家介绍一个数据分析的初级项目,目的是通过项目了解如何使用Python进行简单的数据分析。 数据源:博主通过爬虫采集的安X客上海二手房数据,由于能力问题,只获取了2160条数据。 数据初探 首先导入要使用的科学计算包numpy,pandas,可视化matplotlib,seaborn im…

NBA球员投篮数据可视化

最近看了公众号「Crossin的编程教室」的一篇文章。 是有关于NBA球员出手数据的可视化案例,原文链接如下。 个人感觉比较有趣,所以想着自己也来实现一波。 总体上来说差不多,可能就是美观点吧... / 01 / 篮球场 从网上找的篮球场尺寸图&#x…

利用Python进行NBA比赛数据分析

利用Python进行NBA比赛数据分析 一、实验介绍 1.1 内容简介 不知道你是否朋友圈被刷屏过nba的某场比赛进度或者结果?或者你就是一个nba狂热粉,比赛中的每个进球,抢断或是逆转压哨球都能让你热血沸腾。除去观赏精彩的比赛过程,我们…

2021年常规赛NBA球员数据分析

项目介绍: 1、数据来源: 1)数据来源腾讯体育NBA数据,爬虫解析三个JS网页解析获得数据,共有150个球员和22个指标,整理后数据最终如下图格式 2)球队队徽来自网络 3)球队地理位置的经…

kaggle:NBA球员投篮数据分析与可视化(一)

作为数据科学领域的金字招牌,kaggle已成为世界上最受欢迎的数据科学竞赛平台。在kaggle上,每个竞赛题下都藏匿着大批来自世界各地并且身怀绝技的数据科学家。作为一种众包模式,kaggle通过收取部分佣金将企业的数据挖掘问题发布在平台上并设立…

实例:【基于机器学习的NBA球员信息数据分析与可视化】

文章目录 一、项目任务二、代码实现及分析1. 导入模块2. 导入文件并对文件信息进行整体探测3. 数据预处理3.1 查看数据集信息3.2 数据清洗与转换3.3 数据去重 4. 数据可视化4.1 数据相关性4.2 球员数据分析 5. 基于逻辑回归的球员分类5.1 数据重定义5.2 划分数据集与验证集5.3 …

利用Python预测NBA比赛结果

关注「实验楼」,每天分享一个项目教程 NBA总决赛正在火热上演,而有数据的地方就有预测,本教程就教你使用Python预测NBA比赛的结果。 正文共:3240 字 预计阅读时间:8 分钟‍ 一、实验介绍 1.1 内容简介 不知道你是否…

PayPal,Stripe,Square轮询支付系统

轮询展示 展示我们轮询的页面 轮询套餐 根据不同的用户和需求,可以选择不同的套餐 普通版 1500元 1年 1个用户 支持Paypal/Stripe 不限制A站个数 不限制B站个数 不限制提交模式 订单管理 物流管理 风控管理 必要的网站数据处理 24小时远程协助 开始…

使用chatgpt过掉邮生活滑块记录 ob+wasm print参数

****## 邮生活滑块记录 地址 :‘aHR0cHM6Ly95b3VzaGVuZ2h1by4xMTE4NS5jbi93eC8jL2xheGluUmVnaXN0P3VzZXJJZD0yMTA1NTQ2MTYxOSZhY3Rpdml0eUlkPTI4MiZydWxlSWQ9Mjg’ 如图 如上图 大概就这点参数 基本都是前面请求拿的 除了print enmiid 。。。。。。 结果&#xff1…

连续支付(周期扣款)功能开发及注意事项

最近有一个版本需求,需要接入周期扣款做连续会员的功能,没想到这一做就是小半个月,趟了很多坑,所以觉得有必要记录一下 1.周期扣款总体设计 在支付宝和微信中(非苹果支付),周期扣款的流程主要有…