Python抓取上海各地区房价平均值
作者:司开星
http://blog.csdn.net/chroming/article/details/46471155
用Python写了一个抓取上海地区二手房价格的程序,Python2.7,数据来自赶集网。由于在赶集网查看房价不需要登录,所以程序也十分简单。程序代码如下:
源代码托管在:https://github.com/chroming/sh_house_price/
# -*- coding:utf-8 -*-import requestsimport re#本程序用于抓取赶集网上海各地区二手房房价均值,默认抓取页数为50页。#使用python语言,requests库抓取网页,re库用于正则抓取。print "本程序用于计算赶集上海二手区房价,单位万/平米"print ('''每个区对应代码如下:
0:显示上海所有区单独的平均房价;
1:浦东新区;
2:闵行区;
3:徐汇区;
4:长宁区;
5:普陀区;
6:静安区;
7:卢湾区;
8:黄浦区;
9:闸北区;
a:虹口区;
b:杨浦区;
c:宝山区;
d:嘉定区;
e:青浦区;
f:松江区;
g:金山区;
h:奉贤区;
i:南汇区;
j:崇明区;
k:上海周边;
''')#各地区页面代码num_area = { '1':'http://wap.ganji.com/sh/fang5/pudongxinqu/o', '2':'http://wap.ganji.com/sh/fang5/minhang/o', '3':'http://wap.ganji.com/sh/fang5/xuhui/o', '4':'http://wap.ganji.com/sh/fang5/changning/o', '5':'http://wap.ganji.com/sh/fang5/putuo/o', '6':'http://wap.ganji.com/sh/fang5/jingan/o', '7':'http://wap.ganji.com/sh/fang5/luwan/o', '8':'http://wap.ganji.com/sh/fang5/huangpu/o', '9':'http://wap.ganji.com/sh/fang5/zhabei/o', 'a':'http://wap.ganji.com/sh/fang5/hongkou/o', 'b':'http://wap.ganji.com/sh/fang5/yangpu/o', 'c':'http://wap.ganji.com/sh/fang5/baoshan/o', 'd':'http://wap.ganji.com/sh/fang5/jiading/o', 'e':'http://wap.ganji.com/sh/fang5/qingpu/o', 'f':'http://wap.ganji.com/sh/fang5/songjiang/o', 'g':'http://wap.ganji.com/sh/fang5/jinshan/o', 'h':'http://wap.ganji.com/sh/fang5/fengxian/o', 'i':'http://wap.ganji.com/sh/fang5/nanhui/o', 'j':'http://wap.ganji.com/sh/fang5/chongming/o', 'k':'http://wap.ganji.com/sh/fang5/shanghaizhoubian/o'}#各地区显示代码area = { '1':'浦东新区', '2':'闵行区', '3':'徐汇区', '4':'长宁区', '5':'普陀区', '6':'静安区', '7':'卢湾区', '8':'黄浦区', '9':'闸北区', 'a':'虹口区', 'b':'杨浦区', 'c':'宝山区', 'd':'嘉定区', 'e':'青浦区', 'f':'松江区', 'g':'金山区', 'h':'奉贤区', 'i':'南汇区', 'j':'崇明区', 'k':'上海周边'}#获得房价均值函数def get_price(numb):
sp_list = [] for n in range(1,50): #抓取前50页
url = num_area[numb]+str(n)
urlpage = requests.get(url)
urlpage.encoding = 'utf-8'
urltx = urlpage.text
size_price = re.findall(u'(d+)u33a1.*?(d+)u4e07u5143',urltx,re.S)#从页面获取房价和面积
for sp in size_price:
sp_list.append(sp)
priclist = []
sum_pric = 0
i = 0
for sizepri in sp_list:#计算平均房价
pric = round(float(sizepri[1])/float(sizepri[0]),2)
#print pric
priclist.append(pric)
sum_pric = sum_pric + pric
i = i + 1
print (area[numb]+"共获取二手房数量:"+str(i)+",平均房价为:"+str(round(float(sum_pric)/float(i),2))+"万元每平方")#获取输入区域def get_area():
print('')
areanum = str(raw_input("请输入需要查询的区代码,可一次输入多个代码:")) if str(0) in areanum:#输入有0则计算全部区域
for numbe in ('1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k'):
get_price(numbe) else:#输入无0则计算输入区域
for numb in ('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k'): if str(numb) in areanum: print numb
get_price(numb)
get_area()
源代码托管在:https://github.com/chroming/sh_house_price/
不过由于赶集网二手房的内容基本都是广告,而且应该是官方合作的广告,因为所有页的数据都一直在变动。不过这不妨碍我们用它练手。当前抓取到的价格如下:
浦东新区共获取二手房数量:655,平均房价为:3.35万元每平方 闵行区共获取二手房数量:640,平均房价为:2.52万元每平方 徐汇区共获取二手房数量:640,平均房价为:3.95万元每平方 长宁区共获取二手房数量:643,平均房价为:3.57万元每平方 普陀区共获取二手房数量:647,平均房价为:2.91万元每平方 静安区共获取二手房数量:559,平均房价为:5.19万元每平方 卢湾区共获取二手房数量:576,平均房价为:4.86万元每平方 黄浦区共获取二手房数量:638,平均房价为:4.42万元每平方 闸北区共获取二手房数量:640,平均房价为:3.23万元每平方 虹口区共获取二手房数量:641,平均房价为:3.15万元每平方 杨浦区共获取二手房数量:647,平均房价为:3.1万元每平方 宝山区共获取二手房数量:650,平均房价为:2.16万元每平方 嘉定区共获取二手房数量:644,平均房价为:1.47万元每平方 青浦区共获取二手房数量:641,平均房价为:1.51万元每平方 松江区共获取二手房数量:640,平均房价为:1.68万元每平方 金山区共获取二手房数量:638,平均房价为:0.81万元每平方 奉贤区共获取二手房数量:638,平均房价为:2.98万元每平方 南汇区共获取二手房数量:640,平均房价为:1.9万元每平方 崇明区共获取二手房数量:637,平均房价为:0.91万元每平方 上海周边共获取二手房数量:647,平均房价为:0.61万元每平
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android RecycleView使用(CheckBox全选、反选、单选)
- Android自定义滑动解锁控件使用详解
- linux nc命令小结
- Android如何自定义EditText光标与下划线颜色详解
- 基于Centos7 部署Varnish缓存代理服务器
- Android getActivity()为空的问题解决办法
- Android Notification使用方法总结
- Linux下redis的持久化、主从同步与哨兵详解
- 详解Android(共享元素)转场动画开发实践
- Android自定义View中attrs.xml的实例详解
- Android开发之缓冲dialog对话框创建、使用与封装操作
- Windows 10 下安装 Apache 2.4.41的教程
- Android基础教程数据存储之文件存储
- 关于Android短信验证码的获取的示例
- Linux下制作给ARM开发板使用的文件系统