├── 数据可视化图.png
├── README.md
├── pachong_city.html
├── pachong.py
└── pachong_city.js
/数据可视化图.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zza2205260/Python-sphinx/HEAD/数据可视化图.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Python-sphinx
2 | 利用python爬虫抓取了知乎上所有健身精华帖用户,并将他们的地理信息读取并做数据可视化展示在了百度地图上
3 | 放一张最后的图,因为知乎上面的位置信息都是以城市为单位的,虽然最后获取到了,195条有用的地理信息,但是显示起来,还是很少的一部分
4 | 主要的地区都是在北京、广东,沿海一带了。
5 |
--------------------------------------------------------------------------------
/pachong_city.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/pachong.py:
--------------------------------------------------------------------------------
1 |
2 | # -*- coding:utf-8 -*-
3 | import urllib2
4 | import json
5 | import re
6 | import thread
7 | import time
8 |
9 | _count = 0
10 | location_array = []
11 |
12 |
13 |
14 | def city2point(str_city):
15 | f=urllib2.urlopen("http://api.map.baidu.com/telematics/v3/geocoding?keyWord=%s&cityName=131&out_coord_type=gcj02&ak=lCw7Oh8zDaaSk7VBytVMPiV6NgmxLFAy&output=json"%str_city)
16 | data = f.read()
17 | data = eval(data)
18 | if data['results']['location']['lat'] != '':
19 | location_array.append(data['results']['location']);
20 | print location_array
21 |
22 |
23 |
24 | def gethtml(url):
25 | time.sleep(5)
26 | user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
27 | headers = { 'User-Agent' : user_agent }
28 | try:
29 | request = urllib2.Request(url,headers = headers)
30 | response = urllib2.urlopen(request)
31 | data = response.read()
32 | if data:
33 | return data
34 | except urllib2.URLError, e:
35 | if hasattr(e,"code"):
36 | print e.code
37 | if hasattr(e,"reason"):
38 | print e.reason
39 | return
40 |
41 | def analysishtmlpeople(htmlstr):
42 | pong = re.compile('href="/people/.+?"')
43 | result = pong.findall(htmlstr)
44 | p_array = []
45 | for x in xrange(0,len(result)):
46 | p_url = result[x].split('"')
47 | p_array.append(p_url[1])
48 | return p_array
49 |
50 | def analysishtmllocation(htmlstr):
51 | if type(htmlstr) != str:
52 | return
53 | pong_location = re.compile('class="location item".+?title="([^"]+?)"')
54 | pong_name = re.compile('class="position item".+?title="([^"]+?)"')
55 | try:
56 | result = pong_location.findall(htmlstr)
57 | # result_name = pong_name.findall(htmlstr)
58 | if result:
59 | for x in xrange(0,len(result)):
60 | city2point(result[x])
61 | # if result_name:
62 | # for i in xrange(0,len(result_name)):
63 | # print result_name[i]
64 | except Exception, e:
65 | raise e
66 |
67 | def go(url,number):
68 | try:
69 | htmlstr = gethtml(url)
70 | peopleurl = analysishtmlpeople(htmlstr)
71 | for i in xrange(0,len(peopleurl)):
72 | location_url = 'https://www.zhihu.com%s'%(peopleurl[i])
73 | location_html = gethtml(location_url)
74 | location_str = analysishtmllocation(location_html)
75 | except Exception, e:
76 | raise e
77 | global _count
78 | _count += 1
79 | print _count
80 |
81 | return
82 |
83 | def writejson(strjosn):
84 | name = "../python/city.json"
85 | fo = open(name,"w+")
86 | fo.write(strjosn)
87 | fo.close
88 |
89 |
90 |
91 | number = 0
92 | for page in xrange(1,50):
93 | time.sleep(5)
94 | url = 'https://www.zhihu.com/topic/19552192/top-answers?page=%d'%(page)
95 | thread.start_new_thread(go,(url,number,))
96 |
97 | raw_input('***********开始*************')
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/pachong_city.js:
--------------------------------------------------------------------------------
1 | function data(){
2 | return [{'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 36.676589994328, 'lng': 117.01854423947}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 30.253187249978, 'lng': 120.21287663084}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 30.593649371254, 'lng': 114.26602001217}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 31.311713129821, 'lng': 120.61348672594}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 40.122716793196, 'lng': 124.33212555761}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 24.895722917543, 'lng': 118.59384292457}, {'lat': 39.952208834323, 'lng': 116.34323943284}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 22.251017257879, 'lng': 113.55591758616}, {'lat': 22.539877772522, 'lng': 114.01952603223}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.955101119242, 'lng': 116.32220986535}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 30.593649371254, 'lng': 114.26602001217}, {'lat': 37.544632168408, 'lng': 104.10753924335}, {'lat': 31.564396744413, 'lng': 120.29885729017}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 22.553222675436, 'lng': 113.94416379207}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 30.593649371254, 'lng': 114.26602001217}, {'lat': 39.932338512992, 'lng': 116.41548643388}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 43.895638486384, 'lng': 87.573851430617}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 36.676589994328, 'lng': 117.01854423947}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 22.539877772522, 'lng': 114.01952603223}, {'lat': 37.544632168408, 'lng': 104.10753924335}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.98593448201, 'lng': 116.31018290823}, {'lat': 43.834520548273, 'lng': 87.558395771527}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 22.539877772522, 'lng': 114.01952603223}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 30.253187249978, 'lng': 120.21287663084}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.138027950138, 'lng': 117.20426333779}, {'lat': 39.655141188248, 'lng': 115.54433988016}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.905532315852, 'lng': 116.26718582674}, {'lat': 31.087378399124, 'lng': 121.41855708872}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 28.763440930508, 'lng': 104.6266029699}, {'lat': 22.279894145082, 'lng': 113.5116221765}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.138027950138, 'lng': 117.20426333779}, {'lat': 30.593649371254, 'lng': 114.26602001217}, {'lat': 22.539877772522, 'lng': 114.01952603223}, {'lat': 31.564396744413, 'lng': 120.29885729017}, {'lat': 22.800780206686, 'lng': 108.2906725434}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 30.253187249978, 'lng': 120.21287663084}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 36.093454376173, 'lng': 118.52113391124}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.760009012224, 'lng': 115.86906020313}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 22.279894145082, 'lng': 113.5116221765}, {'lat': 39.905532315852, 'lng': 116.26718582674}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.847990822854, 'lng': 116.31531984048}, {'lat': 25.032485572704, 'lng': 102.71310514297}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.905532315852, 'lng': 116.26718582674}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.905532315852, 'lng': 116.26718582674}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 30.253187249978, 'lng': 120.21287663084}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.905532315852, 'lng': 116.26718582674}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.932987313735, 'lng': 116.43548095594}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 30.593649371254, 'lng': 114.26602001217}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 23.401724820079, 'lng': 113.38837298331}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 31.225185969274, 'lng': 121.63188679147}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.760009012224, 'lng': 115.86906020313}, {'lat': 23.401724820079, 'lng': 113.38837298331}, {'lat': 39.905532315852, 'lng': 116.26718582674}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 36.676589994328, 'lng': 117.01854423947}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.728889830377, 'lng': 116.34323934067}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 23.113899849892, 'lng': 113.30119382051}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 22.279894145082, 'lng': 113.5116221765}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.955101119242, 'lng': 116.32220986535}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.895250416933, 'lng': 116.39801025878}, {'lat': 39.922679628099, 'lng': 116.45305798702}, {'lat': 22.539877772522, 'lng': 114.01952603223}]
3 | }
4 |
5 |
6 |
7 |
8 | function addMarker(point,map){
9 | var marker = new BMap.Marker(point);
10 | map.addOverlay(marker);
11 | }
12 |
13 |
14 |
15 | function go(){
16 |
17 | console.log("*****************");
18 | var map = new BMap.Map("container"); // 创建地图实例
19 | var point = new BMap.Point(116.404, 39.915); // 创建点坐标
20 | map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别
21 | map.setMapStyle({style:'midnight'});
22 |
23 | map.addControl(new BMap.NavigationControl());
24 | map.addControl(new BMap.ScaleControl());
25 | map.addControl(new BMap.OverviewMapControl());
26 | map.addControl(new BMap.MapTypeControl());
27 | map.setCurrentCity("杭州"); // 仅当设置城市信息时,MapTypeControl的切换功能才能可用
28 | map.enableScrollWheelZoom(true);
29 | map.centerAndZoom("上海",6);
30 |
31 |
32 | var bounds = map.getBounds();
33 | var sw = bounds.getSouthWest();
34 | var ne = bounds.getNorthEast();
35 | var lngSpan = Math.abs(sw.lng - ne.lng);
36 | var latSpan = Math.abs(ne.lat - sw.lat);
37 |
38 |
39 | json = new data();
40 | console.log(json[0]['lat'])
41 | console.log(json[0]['lng'])
42 |
43 | console.log(sw.lng + lngSpan * (Math.random() * 0.7));
44 | console.log(ne.lat - latSpan * (Math.random() * 0.7));
45 |
46 | for (var i = 0; i < json.length; i ++) {
47 | var point = new BMap.Point(json[i]['lng'],json[i]['lat']);
48 | addMarker(point,map);
49 | }
50 |
51 |
52 |
53 | }
--------------------------------------------------------------------------------