• 使用方法
  • 程序原理
    • 数据来源
    • 数据爬取
      • 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. 这个项目看起来比我这个麻烦多了,毕竟要适配多家中介机构的网站,维护起来应该也比较辛苦。

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

python爬取全国房价并分析相关推荐

  1. Python爬取并简单分析2024年普通高校招生专业(专业类)选考科目要求

    推荐教材: <Python网络程序设计(微课版)>,ISBN:978-7-302-58312-7,董付国,清华大学出版社,2021年8月出版,京东.当当.淘宝均有销售 配套资源: 教学大纲 ...

  2. 哪吒票房逼近40亿,用python爬取哪吒短评分析

    目录 前言 分析 具体步骤 登录 爬取与存储 可视化分析 结语 前言 暑期档电影惨淡,但随着哪吒爆红开拓了新局面.这也是国产动画的首次爆红.在哪吒刚出,笔者以为最多10亿就算不错的了.没想过仅过了几天 ...

  3. python画哪吒_哪吒票房逼近30亿,python爬取哪吒短评分析

    目录 前言 分析 具体步骤 登录 爬取与存储 可视化分析 结语 前言 暑期档电影惨淡,但随着哪吒爆红开拓了新局面.这也是国产动画的首次爆红.在哪吒刚出,笔者以为最多10亿就算不错的了.没想过仅过了几天 ...

  4. python爬取京东评论分析_【实战好文】|爬取京东书籍评论并分析

    原标题:[实战好文]|爬取京东书籍评论并分析 这是菜鸟学Python的粉丝第10篇原创投稿 阅读本文大概需要5分钟 本篇作者:小郑同学 上周的赠书活动中,收到了楼主送的<利用Python进行数据 ...

  5. python商品会员打折_双十一商品优惠打折,用Python爬取商品信息分析发现这里套路真深...

    咱们今天就以京东笔记本电脑为例分析一下 首先咱们针对京东商城笔记本的网页进行分析,这回只要在网页源码上分析,就可以获取笔记本价格.标题.评论数.商家名称.商家性质. 想要学习Python.关注小编,私 ...

  6. python爬取京东评论分析_Python爬取京东商品评论+制作关键字云+情感分析图

    首先我们要了解一下,我们用requests包爬取的都只是写在HTML页面上的数据,但是呢,现在很多网站的数据都是通过js代码生成的,除非你找到它,不然是爬取不到的. 首先我随意打开一个京东的商品的详情 ...

  7. python爬取大学生就业分析专科和本科的信息https://edu.jobui.com/major/(上)JSON的存储

    一,爬虫步骤 1.导入模块json,requests,lxml 2.url地址 3,请求头 4.get请求 200正常访问 5.解码 6.找到节点 7.创建一个存储所有信息的列表 8.循环遍历li节点 ...

  8. python爬取京东评论分析_Python爬取京东商品评价(动态网页的爬取)

    首先打开京东的任意几个商品页面,并观察URL,可以发现都是https://item.jd.com/+数字+.htm的格式,而且数字也随着商品的改变而改变,基本上可以确定这串数字是商品ID 之后我们找到 ...

  9. python爬取数据案例分析_基于Python及webdriver的网页抓取案例

    上次有朋友问怎么抓取交易所网站的数据,特别是历史数据,这里特别推荐使用selenium这一自动化测试框架. 原本selenium是用来完成大量基于浏览器的自动化测试的,但由于可以方便地执行JS代码,摸 ...

最新文章

  1. com.android.sadk卸载不掉,Android的Service的两种方式以及使用
  2. 中国充换电行业产销需求预测与转型升级战略分析报告2022-2028年版
  3. Python基础概念_8_字符串处理
  4. sqlite-常用语句
  5. cdatabase读取excel第一行数据_pandas读取excel数据并对重复数据进行标记或者删除
  6. 第一节:WebApi的纯原生态的RestFul风格接口和路由规则介绍
  7. 用3种方式解决复杂报表
  8. Java Http编程
  9. php larve,封装composer包,实现thinkphp、larverl、yii框架中使用(使用框架实现回调方法)...
  10. 小升初想择校,英语跟语数一样重要吗?
  11. kettle能否自动建表_Kettle、Python实现报表自动化
  12. help用法总结(基于材料:“老托福听力93篇”)
  13. 【第一组】第十二次冲刺例会纪要
  14. 总结:阿里云学生服务器地址/条件/续费等问题及解答FAQ
  15. iPhone破解相关知识
  16. Java 读取Word表格中的文本和图片
  17. 计算机音乐-乐理知识(1)
  18. msysGit和TortoiseGit
  19. 使用原生js实现点击按钮展示不同状态内容
  20. python 蓝牙开发_蓝牙开发快速入门

热门文章

  1. Vue 子组件修改父组件值的解决方法
  2. css动画小案例 弹力球
  3. jquery.slimScroll插件 div添加滚动条
  4. 互联网+时代拉卡拉支付如何助力中小企业运营升级
  5. JavaScript函数的参数和返回值
  6. python 量化交易知识
  7. 学插画的线上机构排行榜
  8. python语言中、用来表示赋值的符号是_第二章Python语言基础知识
  9. 专访惠众科技|元宇宙应用如何借助3DCAT实时云渲染实现流畅大并发呈现?
  10. oracle 笔记4(Fundamentals II)