使用Python统计深圳市公租房申请人省份年龄统计

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

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

  1 # -*- coding:utf-8 -*-
  2 import time
  3 import json
  4 import lxml.html
  5 from lxml import etree
  6 from  HTMLParser import HTMLParser #使用beautifulsoup也可以
  7
  8 #http://www.crummy.com/software/BeautifulSoup/
  9 #http://blog.csdn.net/my2010sam/article/details/14526223
 10
 11 try:
 12     from urllib.request import urlopen,Request
 13 except:
 14     from urllib2 import urlopen, Request
 15
 16
 17 area={"11":"北京","12":"天津","13":"河北","14":"山西","15":"内蒙古","21":"辽宁","22":"吉林","23":"黑龙江","31":"上海",
 18       "32":"江苏","33":"浙江","34":"安徽","35":"福建","36":"江西","37":"山东","41":"河南","42":"湖北","43":"湖南",
 19       "44":"广东","45":"广西","46":"海南","50":"重庆","51":"四川","52":"贵州","53":"云南","54":"西藏","61":"陕西",
 20       "62":"甘肃","63":"青海","64":"宁夏","65":"新疆","71":"台湾","81":"香港","82":"澳门","91":"国外"}
 21 ages =[0]*11
 22 provinceCnt=[0]*91
 23 RECORD_BY_EACH_PAGE = [10,15,30,50,5000]
 24 currentYear=time.localtime()[0]#get year
 25 URL_BY_PAGESIZE=‘http://bzflh.szjs.gov.cn/TylhW/lhmcAction.do?pageSize=%s&method=queryYgbLhmcInfo&waittype=2‘
 26
 27 #http://XXX.cn?pageSize=XXX&page=XXX,waittype=2 公租房,waittype=1 安居房
 28 URL_BY_PAGE_PAGESIZE  =‘http://bzflh.szjs.gov.cn/TylhW/lhmcAction.do?pageSize=%s&method=queryYgbLhmcInfo&waittype=%s&page=%s‘
 29
 30 #Social_Housing_Items=[URL_BY_PAGE_PAGESIZE_GongZuFang,URL_BY_PAGE_PAGESIZE_AnJuFang]
 31
 32 def getHomePage(url,pagesize):
 33     try:
 34         request = Request(url)
 35         lines=urlopen(request,timeout=10).read()
 36         if len(lines)<20:
 37             return None #no data
 38     except Exception as e:
 39             print e
 40     else:
 41         if pagesize!=10 and pagesize!=15 and pagesize!=30 and pagesize!=50 and pagesize !=5000:
 42             pagesize = 15 #default as 15 record each page
 43         lines=lines.decode(‘utf-8‘)
 44         splitLines=lines.split(‘\r\n‘)
 45         for line in splitLines:
 46             #if "pageSize" in line:
 47                 #print line[:50]
 48             if "pagebanner" in line:
 49                 totalPage= line[:50].split(‘>‘)[1].split(‘ ‘)[0]
 50                 totalPage=totalPage.split(‘,‘)
 51                 if  len(totalPage)>1:
 52                     pages=(int(totalPage[0])*1000+int(totalPage[1]))/pagesize
 53         return pages
 54
 55 def getRawData(url):
 56     try:
 57         request = Request(url)
 58         lines=urlopen(request,timeout=10).read()
 59         if len(lines)<20:
 60             return None #no data
 61     except Exception as e:
 62             print e
 63     else:
 64         return lines.decode(‘utf-8‘)
 65
 66 def getIdentityInfo(code):
 67     """
 68     :param code: identity code showing province and date
 69     :return: province,date
 70     """
 71     provinceCode=code[:2]
 72     cityCode = code[2:6]
 73     date=code[6:10]
 74     return provinceCode,date
 75
 76 class Dataparser(HTMLParser):
 77     def __init__(self):
 78         HTMLParser.__init__(self)
 79         self.tr=False
 80         self.td =0
 81         self.data =False
 82     def handle_starttag(self,tag,attrs):
 83         """
 84         参数tag是标签名,比如td,tr‘,attrs为标签所有属性(name,value)列表,这里是[(‘class‘,‘para‘)]
 85         :param tag:
 86         :param attrs:
 87         :return:
 88         """
 89         if tag==‘tr‘:
 90             self.tr=True
 91         if tag ==‘td‘and self.tr==True:
 92             self.data = True
 93             for name,value in attrs:
 94                 print "name and value are",name,value
 95     def handle_endtag(self,tag):
 96         if tag==‘td‘:
 97             self.data = False
 98             #print "a end tag:",tag,self.getpos()
 99
100     def handle_data(self,data):
101         if self.data and len(data)==18 and  ‘\r\n‘ not in data:
102             #print data #ID card NO
103             provinceCode,date=getIdentityInfo(data)
104             ageRange=currentYear - int(date)
105             if ageRange>=100:
106                 print ‘test‘,ageRange
107             #ages[ageRange/10] +=1
108             #temp=area[provinceCode].decode(‘utf-8‘)
109             PC=int(provinceCode)
110             provinceCnt[PC]+=1
111
112 if __name__ ==‘__main__‘:
113     #计算总共页数,每页可以自己限定
114     for type in range(2):
115         pages=getHomePage(URL_BY_PAGE_PAGESIZE%(RECORD_BY_EACH_PAGE[0],type+1,1),RECORD_BY_EACH_PAGE[4])
116         parse=Dataparser()
117         while pages>=1:
118             #for page in range(pages):
119             lines=getRawData(URL_BY_PAGE_PAGESIZE%(RECORD_BY_EACH_PAGE[4],type+1,pages))
120             parse.feed(lines)
121             #parse.close()
122             pages-=1
123         parse.close()
124         if type==0:
125             print "深圳安居房申请人全国分布情况统计:"
126             for i in provinceCnt:
127                 if i>0:          #只打印有数据的省份
128                     pIndex=str(provinceCnt.index(i))
129                     print area[pIndex],i
130             provinceCnt =[0]*91
131         elif type==1:
132             print "深圳公租房申请人全国分布情况统计:"
133             for i in provinceCnt:
134                 if i>0:          #只打印有数据的省份
135                     pIndex=str(provinceCnt.index(i))
136                     print area[pIndex],i
137             provinceCnt =[0]*91

时间: 2024-10-17 22:05:27

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

七、统计网站中不同省份用户的访问数

一.需求 针对log日志中给定的信息,统计网站中不同省份用户的访问数 二.编程代码 package org.apache.hadoop.studyhdfs.mapreduce; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; im

Python list去重及找出,统计重复项

http://bbs.chinaunix.net/thread-1680208-1-1.html 如何找出 python list 中有重复的项 http://www.cnblogs.com/feisky/archive/2012/12/06/2805251.html 比较容易记忆的是用内置的setl1 = ['b','c','d','b','c','a','a']l2 = list(set(l1))print l2 还有一种据说速度更快的,没测试过两者的速度差别l1 = ['b','c','d

spark 省份次数统计实例

//统计access.log文件里面IP地址对应的省份,并把结果存入到mysql package access1 import java.sql.DriverManager import org.apache.spark.broadcast.Broadcast import org.apache.spark.{SparkConf, SparkContext} object AccessIp { def main(args: Array[String]): Unit = { //new sc va

数据库性能优化、统计信息与对象统计信息概述收集、扩展统计信息、dbms_stats.get_prefs

数据库性能优化 相关书籍: 1.基于成本的Oracle优化法则 2.Oracle性能诊断艺术 3.基于Oracle的SQL优化 ----------------------------------------------------------------------------------------- 两种优化器: CBO  cost-base optimizer 基于cost 更大适应性/灵活性/10g开始 RBO  rule-base optimizer 基于规则 制定了15条/10g以

理解统计信息(4/6):自动更新统计信息的阀值——人为更新统计信息的重要性

在理解统计信息(3/6):谁创建和管理统计信息?在性能调优中,统计信息的作用里我们讨论了统计信息的自动创建和自动更新.我们真的需要人为维护统计信息来保持性能最优?答案是肯定的,这取决与你的工作量.SQL Server只在达到阀限值时进行统计信息的自动更新.当大量的Insert/Update/Delete操作发生时,内建的自动更新统计信息不能持续保证性能的最优. 经过一系列的Insert/Update/Delete后,统计信息可能不会是最新.如果SQL Server查询优化器在表里需要指定列的统计

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

1.简单的,按月统计数量 SELECT CREATE_DATE, DATE_FORMAT(CREATE_DATE, '%Y-%m') AS month , COUNT(*) AS sum FROM pt_user GROUP BY month; 2.按月累加统计数据 SELECT a.month, SUM(b.total) AS total FROM ( SELECT DATE_FORMAT(CREATE_DATE, '%Y-%m') AS month, SUM(sum) AS total FR

微信号复制统计工具,来粉详细统计功能,微信号复制统计系统,落地页微信号自动控制功能

复制统计,加粉统计功能,微信号复制统计,关键词复制统计功能,实现微信号自动上下线控制 注册地址链接: www.hduofen.com所有功能详细介绍链接:介绍 免费注册,提供免费使用,而且功能无限制,只是免费版的开放的数量比较少.付费版价格也是明码标价,可以根据自己推广的链接需求选择对应的版本. 使用原理: 新增功能: 1. 新增微信号分组管理功能 2. 新增微信号客服名称同步显示功能 3. 新增微信号根据复制规则自动控制上下线时间. 4. 新增微信号权重设置,每个微信号可以设置不同的权重来调整

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

源码如下: 1 # pygal包:生成可缩放的矢量图形文件,可自适应不同尺寸的屏幕显示 2 # 安装:python -m pip intall pygal-2.4.0-py2.py3-none-any.whl 3 # 功能:掷一个骰子统计次数并以直方图形式显示 4 import pygal 5 from die_class import Die 6 7 die = Die() # 实例化一个骰子对象 8 9 results = [] 10 # 掷骰子100次 11 for n in range(

Python开发程序:生成环境下统计网站访问日志信息

日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他位置,当前日志清空 NGINX日志配置信息: http { log_format main '$remote_addr - [$time_local] "$request" ' ' - $status "User_Cookie:$guid" '; } server {