phil-chow

继之前爬取知乎用户之后,目前爬取到3.5万条数据,但是在这些数据中有一些是没有完整填写用户信息的。检索数据库中地理位置不为空的用户,进行地域统计。

 1 # -*- coding: utf-8 -*-
 2 
 3 import re
 4 import sqlite3
 5 import sys
 6 reload(sys)
 7 sys.setdefaultencoding(\'utf-8\')
 8 
 9 class CountCollect(object):
10     """docstring for CountCollect"""
11     
12     pro_city = {}
13     city_pro = {}
14     prolist = []
15     citylist = []
16     conn = sqlite3.connect(\'zhihuuser.db\')
17     conn.text_factory = str
18     cur = conn.cursor()
19 
20     def getss(self):
21         shengshi = open(\'shengshi.txt\',\'r\')
22         for line in shengshi.readlines():
23             province = line.split(":")[0]
24             # print province
25             self.prolist.append(province)
26             self.pro_city.setdefault(province,{})
27             self.pro_city[province].setdefault(\'number\',0)            
28             self.pro_city[province].setdefault(\'cities\',{})
29             cities = line.split(\':\')[-1].split(\'\n\')[0].split(\' \')
30             # print cities
31             for city in cities:
32                 # print city,type(city)
33                 self.citylist.append(city)
34                 self.pro_city[province][\'cities\'].setdefault(city,0)
35                 self.city_pro[city] = province
36         # print self.prolist
37         # for i in self.citylist:
38         #     print i
39         
40 
41     def getlocation(self):
42         # 从数据库中检索出数据
43         result = self.cur.execute(\'select location from userstb 
44             where location is not NULL\').fetchall()
45         string = []
46         for line in result:
47             try:
48                 string.append(line[0].encode("gbk"))
49             except Exception, e:
50                 string.append(line[0])
51         ww = open(\'location.txt\',\'a\')
52         for x in string:
53             ww.write(x)
54             ww.write(\'\n\')
55         # 符合省
56         for pro in self.prolist:
57             for x in string:
58                 if re.search(pro,x):
59                     print "%s----%s" %(pro,x)
60                     self.pro_city[pro][\'number\'] += 1
61                 # 符合市
62         for cit in self.citylist:
63             for x in string:
64                 if re.search(cit,x):
65                     print "%s----%s" %(cit,x)
66                     pro = self.city_pro[cit]
67                     self.pro_city[pro][\'number\'] += 1
68                     self.pro_city[pro][\'cities\'][cit] += 1
69         
70         
71         keys = self.pro_city.keys()
72         r = open(\'result2.txt\',\'a\')
73         for key in keys:
74             # print key,type(key)
75             # print cmp(\'直辖市\',key.decode(\'gbk\'))
76             if cmp(key.decode(\'gbk\'),\'直辖市\')==0 or 
77                         cmp(key.decode(\'gbk\'),\'港澳台\')==0:
78                 for city in self.pro_city[key][\'cities\']:
79                     print city, self.pro_city[key][\'cities\'][city]
80                     r.write("{name:\'")
81                     r.write(city)
82                     r.write("\',value: ")
83                     r.write(str(self.pro_city[key][\'cities\'][city]))
84                     r.write("},")
85                     r.write(\'\n\')
86             else:
87                 print key, self.pro_city[key][\'number\']
88                 r.write("{name:\'")
89                 r.write(key)
90                 r.write("\',value: ")
91                 r.write(str(self.pro_city[key][\'number\']))
92                 r.write("},")
93                 r.write(\'\n\')
94 
95 
96 if __name__ == \'__main__\':
97     cc = CountCollect()
98     cc.getss() #生成省市地域字典
99     cc.getlocation() #分类统计

其中的shengshi.txt是省市的列表,文件如下:

直辖市:北京 上海 天津 重庆
河北:石家庄 唐山 秦皇岛 邯郸 邢台 保定 张家口 承德 沧州 廊坊 衡水
山西:太原 大同 阳泉 长治 晋城 朔州 晋中 运城忻州 临汾 吕梁
内蒙古:呼和浩特 包头 乌海 赤峰 通辽 鄂尔多斯 呼伦贝尔 巴彦淖尔 乌兰察布 兴安 锡林郭勒 阿拉善
辽宁:沈阳 大连 鞍山 抚顺 本溪 丹东 锦州 营口 阜新 辽阳 盘锦 铁岭 朝阳 葫芦岛
吉林:长春 吉林 四平 辽源 通化 白山 松原 白城 延边
黑龙江:哈尔滨 齐齐哈尔 鸡西 鹤岗 双鸭山 大庆 伊春 佳木斯 七台河 牡丹江 黑河 绥化 大兴安岭
江苏:南京 无锡 徐州 常州 苏州 南通 连云港 淮安 盐城 扬州 镇江 泰州 宿迁
浙江:杭州 宁波 温州 嘉兴 湖州 绍兴 金华 衢州 舟山 台州 丽水
安徽:合肥 芜湖 蚌埠 淮南 马鞍山 淮北 铜陵 安庆 黄山 滁州 阜阳 宿州 巢湖 六安 亳州 池州 宣城
福建:福州 厦门 莆田 三明 泉州 漳州 南平 龙岩 宁德
江西:南昌 景德镇 萍乡 九江 新余 鹰潭 赣州 吉安 宜春 抚州 上饶
山东:济南 青岛 淄博 枣庄 东营 烟台 潍坊 威海 济宁 泰安 日照 莱芜 临沂 德州 聊城 滨州 菏泽
河南:郑州 开封 洛阳 平顶山 焦作 鹤壁 新乡 安阳 濮阳 许昌 漯河 三门峡 南阳 商丘 信阳 周口 驻马店
湖北:武汉 黄石 襄樊 十堰 荆州 宜昌 荆门 鄂州 孝感 黄冈 咸宁 随州 恩施
湖南:长沙 株洲 湘潭 衡阳 邵阳 岳阳 常德 张家界 益阳 郴州 永州 怀化 娄底 湘西
广东:广州 深圳 珠海 汕头 韶关 佛山 江门 湛江 茂名 肇庆 惠州 梅州 汕尾 河源 阳江 清远 东莞 中山 潮州 揭阳云浮
广西:南宁 柳州 桂林 梧州 北海 防城港 钦州 贵港 玉林 百色 贺州 河池 来宾 崇左
海南:海口 三亚
四川:成都 自贡 攀枝花 泸州 德阳 绵阳 广元 遂宁 内江 乐山 南充 宜宾 广安 达州 眉山 雅安 巴中 资阳 阿坝 甘孜凉山
贵州:贵阳 六盘水 遵义 安顺 铜仁 毕节 黔西南 黔东南 黔南
云南:昆明 曲靖 玉溪 保山 昭通 丽江 普洱 临沧 文山 红河 西双版纳 楚雄 大理 德宏 怒江 迪庆
西藏:拉萨 昌都 山南 日喀则 那曲 阿里 林芝
陕西:西安 铜川 宝鸡 咸阳 渭南 延安 汉中 榆林 安康 商洛
甘肃:兰州 嘉峪关 金昌 白银 天水 武威 张掖 平凉 酒泉 庆阳 定西 陇南 临夏 甘南
青海:西宁 海东 海北 黄南 海南 果洛 玉树 海西
宁夏:银川 石嘴山 吴忠 固原 中卫
新疆:乌鲁木齐 克拉玛依 吐鲁番 哈密 和田 阿克苏 喀什 克孜勒苏柯尔克孜 巴音郭楞蒙古 昌吉 博尔塔拉蒙古 伊犁哈萨克塔城 阿勒泰
港澳台:香港 澳门 台湾

 

生成result2.txt文件结构如下,为何要生成如此结构的文件,下文有用

{name:\'贵州\',value: 23},
{name:\'黑龙江\',value: 88},
{name:\'安徽\',value: 194},
{name:\'青海\',value: 24},
{name:\'宁夏\',value: 8},
{name:\'浙江\',value: 637},
{name:\'广东\',value: 1281},
{name:\'河北\',value: 123},
{name:\'江西\',value: 77},
{name:\'辽宁\',value: 202},
{name:\'湖北\',value: 380},
{name:\'福建\',value: 226},
{name:\'陕西\',value: 273},
{name:\'香港\',value: 48},
{name:\'台湾\',value: 4},
{name:\'澳门\',value: 3},
{name:\'吉林\',value: 81},
{name:\'山西\',value: 70},
{name:\'西藏\',value: 2},
{name:\'河南\',value: 185},
{name:\'甘肃\',value: 40},
{name:\'湖南\',value: 196},
{name:\'江苏\',value: 722},
{name:\'海南\',value: 40},
{name:\'山东\',value: 360},
{name:\'新疆\',value: 27},
{name:\'广西\',value: 77},
{name:\'天津\',value: 177},
{name:\'重庆\',value: 142},
{name:\'北京\',value: 1366},
{name:\'上海\',value: 913},
{name:\'云南\',value: 46},
{name:\'内蒙古\',value: 39},
{name:\'四川\',value: 340},

使用echart网站的地图图例,生成如下图所示地域结构:

颜色越深,表示当前区域的用户数越多。

分类:

技术点:

相关文章:

  • 2021-08-26
  • 2022-01-13
  • 2021-10-16
  • 2021-12-28
  • 2021-06-23
  • 2022-01-10
  • 2021-12-19
猜你喜欢
  • 2021-12-18
  • 2021-12-24
  • 2021-12-18
  • 2021-11-19
  • 2021-11-29
  • 2021-11-16
  • 2021-09-27
相关资源
相似解决方案