使用Python,HtmlParser来统计深圳市保障房申请人的原籍省份分布,年龄分布等。从侧面可以反映鹏城人的地域分布。以下python代码增大了每一次获取的记录数,从而少提交几次请求。如果按照WEB主页设定的每一次请求最多50个记录,那就得提交数千次请求,显然费时。另外,也可以使用多线程处理,快速获得数据,解析数据,然后使用pandas,matplotlib等工具进行数据处理和绘制。查询了系统,截止2016年2月,轮候系统的保障房人数大概4万多,公租房轮候人数大概5万,以下数据仅作学习使用,统计结果如下:

毫无疑问,广东本地人申请的占多数。前十名当中,和广东接壤的省份也占了不少比例,特别是两湖,江西,剩下的由人口大省占据。深圳保障房建设速度和规模居全国首位,但是因为人数众多,所以需要排队等候。远离XX的房东,避免年年涨的房租,那就加入排队轮候大军吧。

 # -*- coding:utf-8 -*-
import time
import json
import lxml.html
from lxml import etree
from HTMLParser import HTMLParser #使用beautifulsoup也可以 #http://www.crummy.com/software/BeautifulSoup/
#http://blog.csdn.net/my2010sam/article/details/14526223 try:
from urllib.request import urlopen,Request
except:
from urllib2 import urlopen, Request area={"":"北京","":"天津","":"河北","":"山西","":"内蒙古","":"辽宁","":"吉林","":"黑龙江","":"上海",
"":"江苏","":"浙江","":"安徽","":"福建","":"江西","":"山东","":"河南","":"湖北","":"湖南",
"":"广东","":"广西","":"海南","":"重庆","":"四川","":"贵州","":"云南","":"西藏","":"陕西",
"":"甘肃","":"青海","":"宁夏","":"新疆","":"台湾","":"香港","":"澳门","":"国外"}
ages =[0]*11
provinceCnt=[0]*91
RECORD_BY_EACH_PAGE = [10,15,30,50,5000]
currentYear=time.localtime()[0]#get year
URL_BY_PAGESIZE='http://bzflh.szjs.gov.cn/TylhW/lhmcAction.do?pageSize=%s&method=queryYgbLhmcInfo&waittype=2' #http://XXX.cn?pageSize=XXX&page=XXX,waittype=2 公租房,waittype=1 安居房
URL_BY_PAGE_PAGESIZE ='http://bzflh.szjs.gov.cn/TylhW/lhmcAction.do?pageSize=%s&method=queryYgbLhmcInfo&waittype=%s&page=%s' #Social_Housing_Items=[URL_BY_PAGE_PAGESIZE_GongZuFang,URL_BY_PAGE_PAGESIZE_AnJuFang] def getHomePage(url,pagesize):
try:
request = Request(url)
lines=urlopen(request,timeout=10).read()
if len(lines)<20:
return None #no data
except Exception as e:
print e
else:
if pagesize!=10 and pagesize!=15 and pagesize!=30 and pagesize!=50 and pagesize !=5000:
pagesize = 15 #default as 15 record each page
lines=lines.decode('utf-8')
splitLines=lines.split('\r\n')
for line in splitLines:
#if "pageSize" in line:
#print line[:50]
if "pagebanner" in line:
totalPage= line[:50].split('>')[1].split(' ')[0]
totalPage=totalPage.split(',')
if len(totalPage)>1:
pages=(int(totalPage[0])*1000+int(totalPage[1]))/pagesize
return pages def getRawData(url):
try:
request = Request(url)
lines=urlopen(request,timeout=10).read()
if len(lines)<20:
return None #no data
except Exception as e:
print e
else:
return lines.decode('utf-8') def getIdentityInfo(code):
"""
:param code: identity code showing province and date
:return: province,date
"""
provinceCode=code[:2]
cityCode = code[2:6]
date=code[6:10]
return provinceCode,date class Dataparser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.tr=False
self.td =0
self.data =False
def handle_starttag(self,tag,attrs):
"""
参数tag是标签名,比如td,tr',attrs为标签所有属性(name,value)列表,这里是[('class','para')]
:param tag:
:param attrs:
:return:
"""
if tag=='tr':
self.tr=True
if tag =='td'and self.tr==True:
self.data = True
for name,value in attrs:
print "name and value are",name,value
def handle_endtag(self,tag):
if tag=='td':
self.data = False
#print "a end tag:",tag,self.getpos() def handle_data(self,data):
if self.data and len(data)==18 and '\r\n' not in data:
#print data #ID card NO
provinceCode,date=getIdentityInfo(data)
ageRange=currentYear - int(date)
if ageRange>=100:
print 'test',ageRange
#ages[ageRange/10] +=1
#temp=area[provinceCode].decode('utf-8')
PC=int(provinceCode)
provinceCnt[PC]+=1 if __name__ =='__main__':
#计算总共页数,每页可以自己限定
for type in range(2):
pages=getHomePage(URL_BY_PAGE_PAGESIZE%(RECORD_BY_EACH_PAGE[0],type+1,1),RECORD_BY_EACH_PAGE[4])
parse=Dataparser()
while pages>=1:
#for page in range(pages):
lines=getRawData(URL_BY_PAGE_PAGESIZE%(RECORD_BY_EACH_PAGE[4],type+1,pages))
parse.feed(lines)
#parse.close()
pages-=1
parse.close()
if type==0:
print "深圳安居房申请人全国分布情况统计:"
for i in provinceCnt:
if i>0: #只打印有数据的省份
pIndex=str(provinceCnt.index(i))
print area[pIndex],i
provinceCnt =[0]*91
elif type==1:
print "深圳公租房申请人全国分布情况统计:"
for i in provinceCnt:
if i>0: #只打印有数据的省份
pIndex=str(provinceCnt.index(i))
print area[pIndex],i
provinceCnt =[0]*91

使用Python统计深圳市公租房申请人省份年龄统计的更多相关文章

  1. spark 省份次数统计实例

    //统计access.log文件里面IP地址对应的省份,并把结果存入到mysql package access1 import java.sql.DriverManager import org.ap ...

  2. jieba (中文词频统计) 、collections (字频统计)、WordCloud (词云)

    py库: jieba (中文词频统计) .collections (字频统计).WordCloud (词云) 先来个最简单的: # 查找列表中出现次数最多的值 ls = [1, 2, 3, 4, 5, ...

  3. 【PHP】php+txt实现网页计数器(限IP统计方式和不限IP统计方式)

    一般的网页计数器制作实现思路:首先设定存放统计数据的文件(counter.txt)——读取文件中的内容存入字符串——自加操作——以写入方式打开文件写入数据——从文件中输出统计数据——关闭文件. 代码: ...

  4. Luogu 2590 [ZJOI2008]树的统计 / HYSBZ 1036 [ZJOI2008]树的统计Count (树链剖分,LCA,线段树)

    Luogu 2590 [ZJOI2008]树的统计 / HYSBZ 1036 [ZJOI2008]树的统计Count (树链剖分,LCA,线段树) Description 一棵树上有n个节点,编号分别 ...

  5. sql按月统计数量和按月累加统计数量

    1.简单的,按月统计数量 SELECT CREATE_DATE, DATE_FORMAT(CREATE_DATE, '%Y-%m') AS month , COUNT(*) AS sum FROM p ...

  6. 【python调用windows CLI】调用adb统计Android app的流量消耗

    主要记录python如何调用windows CLI 手机连接PC,adb devices可以看到手机sn 通过adb 获取指定app的processID UID 读取Android  /proc/ne ...

  7. python之pygal:掷一个骰子统计次数并以直方图形式显示

    源码如下: # pygal包:生成可缩放的矢量图形文件,可自适应不同尺寸的屏幕显示 # 安装:python -m pip intall pygal-2.4.0-py2.py3-none-any.whl ...

  8. 用Python实现小说中的汉字频率统计

     环境: Python 3的代码,亲测可用. 思路: 是先把每个字符提出来放在列表里:再过滤掉其中的标点符号:最后用字典对某个字出现的频率进行累加. 扩展: 用处很多,稍微改改,既可以用来统计小说或文 ...

  9. 统计学习:《贝叶斯思维统计建模的Python学习法》中文PDF+英文PDF+代码

    用数学工具解决实际问题仅有的要求可能就是懂一点概率知识和程序设计.而贝叶斯方法是一种常见的利用概率学知识去解决不确定性问题的数学方法,对于一个计算机专业的人士,应当熟悉其应用在诸如机器翻译,语音识别, ...

随机推荐

  1. CSV格式数据如何导入SqlServer?

    一.使用微软数据库IDE管理软件:Microsoft SQL Server Management Studio 1.标准的CSV文件格式如下: 2.建数据表 3.在需要导入的数据库右键点击“任务”,选 ...

  2. 谈谈.Net技术面试

    1.引子 最近一直在负责.net(B/S方向)技术面试相关的工作,前前后后面试了不少人,但是通过率较低,大概只有20%左右:有颇多感慨. 最近也一直比较困惑,原因究竟是什么? 是我们要求太高,应聘者本 ...

  3. Daily Scrum02 12.06

    由于一些原因,我们的会议没有在昨天如期举行.今天,我们首先将到目前为止的进度进行了总结. 我们第二轮迭代的主要目标是优化算法,美化界面,增加单词软件的趣味性. 我们准备将软件做的更亲民,界面更友好,我 ...

  4. 兼容IE浏览器的js浏览器全屏代码

    众所周知,IE是个奇葩的浏览器,但是由于用户量很大,开发者还是不得不为IE考虑一下,于是,各种浏览器相关的操作,都要多一个特别的判断——专门针对IE浏览器的判断,这里的全屏也不例外.看代码: func ...

  5. linux系统安装(上)

    1.VMware虚拟机的软件应用 www.vmware.com 2.linux系统安装设置(分区为重点) 3.远程登录管理工具介绍centOS5.5 使用虚拟机的优点 1.不用分区 2.可以完成本机与 ...

  6. 将f2fs文件系统到磁盘

    1·   用git下载f2fs文件系统tools的源代码.下载地址如下:http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.g ...

  7. jQuery File Upload 单页面多实例的实现

    jQuery File Upload 的 GitHub 地址:https://github.com/blueimp/jQuery-File-Upload 插件描述:jQuery File Upload ...

  8. javascript立即执行函数

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  ( ...

  9. CDN服务技术架构图

    前言 在博文中 解读大型网站的演变过程  浅谈 举家搬迁静态文件到CDN 博文中都有涉及CDN,这次我们来详细讲解下CDN的架构 简介 CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器 ...

  10. JavaScript之ES6

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...