├── 数据可视化图.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 | } --------------------------------------------------------------------------------