2018-02-20


title: 摩拜單車(chē)爬蟲(chóng)+GIS測(cè)試
date: 2018-02-20 17:06:25
tags:


摩拜單車(chē)爬蟲(chóng)+GIS測(cè)試

這次源于一次偶然的抓包,在手機(jī)上使用packet capture 對(duì)微信小程序抓包,偶然發(fā)現(xiàn)了如下的數(shù)據(jù):

{
  "code": 0,
  "message": "",
  "biketype": 0,
  "autoZoom": true,
  "radius": 150,
  "object": [
    {
      "distId": "8630779582",
      "distX": 116.28002632187257,
      "distY": 39.91022600618757,
      "distNum": 1,
      "distance": "62",
      "bikeIds": "8630779582#",
      "biketype": 1,
      "type": 0
    },
    {
      "distId": "8630367786",
      "distX": 116.27939881379473,
      "distY": 39.91056046398812,
      "distNum": 1,
      "distance": "117",
      "bikeIds": "8630367786#",
      "biketype": 1,
      "type": 0
    },
    {
      "distId": "0106005017",
      "distX": 116.27949896034224,
      "distY": 39.91104357270857,
      "distNum": 1,
      "distance": "131",
      "bikeIds": "0106005017#",
      "biketype": 2,
      "type": 0
      }

那自然是高興地不得了,標(biāo)準(zhǔn)的JSON So Eazy ??!
借鑒之前爬學(xué)而思的程序【上次爬了一大堆資料,嘿嘿嘿】

將API地址和請(qǐng)求內(nèi)容分成兩個(gè)變量,將其中的經(jīng)緯度信息分割出來(lái),分別各使用一個(gè)變量,再對(duì)其進(jìn)行拼接即可。

#獲取數(shù)據(jù)
def bike(longitude,latitude):
    url = 'https://mwx.mobike.com/mobike-api/rent/nearbyBikesInfo.do'
    #print('請(qǐng)求數(shù)據(jù)')    
    latitude = str(latitude)
    longitude = str(longitude)
    data="verticalAccuracy=0&latitude="+latitude+"&errMsg=getLocation:ok&accuracy=30&horizontalAccuracy=30&speed=-1&longitude="+longitude+"&citycode=010&wxcode=003GVtgj2jeyBF0cxQgj229Igj2GVtg1"
    result = getHtml(url,data)
    return result

之后由于還不會(huì)其他的爬蟲(chóng)方法,就使用最簡(jiǎn)單的import urllib.request
代碼如下

def getHtml(url,data):
    user_agent='Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'
    headers = {
                'charset':'utf-8',
                'platform':'4',
                'referer':'https://servicewechat.com/wx40f112341ae33edb/1/',
                'content-type':'application/x-www-form-urlencoded',
                'user-agent':'MicroMessenger/6.5.4.1000 NetType/WIFI Language/zh_CN',
                'host':'mwx.mobike.com',
                'connection':'Keep-Alice',
                'accept-encoding':'gzip',
                'cache-control':'no-cache'
            }
    #data = urllib.parse.urlencode(values)
    #print(url+'?'+data)
    timeout = 1  
    socket.setdefaulttimeout(timeout)  
    print(url+'?'+data)
    response_result = urllib.request.Request(url+'?'+data)  
    html = urllib.request.urlopen(response_result).read()  
    
    return html

header也一樣是抓包出來(lái)的,反正就是copy嘛~~~

最后就是經(jīng)緯度的范圍,沒(méi)有什么太好的方法。

劃定一個(gè)區(qū)域
循環(huán)套循環(huán)

于是就出現(xiàn)了如下的代碼

for longitude in range(1160000,1168000,80):
    longitude = longitude/10000
    for latitude in range(396000,403000,80):       
        latitude = latitude/10000
        #print(longitude)
        #print(latitude)
        getbike(latitude,longitude)

之所以要把經(jīng)緯度擴(kuò)大10000倍,是因?yàn)?code>range()并不接受float型步長(zhǎng),所以只能將其變成整形,之后再變回去,,唉。
最后是所需要的庫(kù):

import urllib.parse
import urllib.request
import json
import csv
import os
import time
import socket  
import urllib.request 

代碼已經(jīng)傳到Github
地址:https://github.com/w1109790800/Mobike-Reptile


Gis的分析結(jié)果沒(méi)太大進(jìn)展,大冬天的誰(shuí)騎車(chē),,,
[圖片上傳失敗...(image-a22b8c-1519123082633)]
最后附一部分?jǐn)?shù)據(jù)【數(shù)據(jù)量太大,需要的話去github中下載吧】

distId      distX       distY
106162799   116.0003669 39.60155466
106741325   116.0027729 39.59998057
106190593   116.0053821 39.60265709
106003828   116.0063136 39.59663351
106162799   116.0003669 39.60155466
106190593   116.0053821 39.60265709
106741325   116.0027729 39.59998057
106029871   116.0005932 39.61392113
106622939   116.0118808 39.60652963
106133660   115.9955102 39.61525816
106003828   116.0063136 39.59663351
106029871   116.0005932 39.61392113
106006181   116.0018439 39.6175667
106029871   116.0005932 39.61392113
.
.
.

PS:博客地址:http://blog.wangyuyang.top/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天是2018年春節(jié)后來(lái)鄭州的第一天,心中的儀式感作祟,總覺(jué)得今天才是新年的正式開(kāi)始。最近回老家跟老朋友聊天,以及...
    正當(dāng)青春的猴兒閱讀 174評(píng)論 0 0
  • 一早起來(lái),打開(kāi)《簡(jiǎn)書(shū)》,看到昨晚寫(xiě)的《琳說(shuō)曼昆經(jīng)濟(jì)學(xué)之貨幣創(chuàng)造》被“Ida555”點(diǎn)贊并喜歡,點(diǎn)擊Ida5...
    伴你精進(jìn)閱讀 1,269評(píng)論 0 4
  • 生命中感恩遇到慈悲大愛(ài)智慧的格西老師,讓我通過(guò)種子法則的學(xué)習(xí)放大格局,有意的做出慷慨的行為,去施善幫助能幫到的人。...
    張蓉萍閱讀 197評(píng)論 0 0
  • 領(lǐng)導(dǎo)階梯 一本不錯(cuò)的書(shū),對(duì)于現(xiàn)在的我看了之后的益處在于指明一個(gè)方向該如何去提升自己。 圍棋入門(mén) 在AlphaGo大...
    wangshuCoding閱讀 191評(píng)論 0 0
  • 初夏的夜晚 沒(méi)有夏蟲(chóng)的鳴叫 只有寂靜 一個(gè)人漫步在 櫻花長(zhǎng)廊 享受著一個(gè)人的寧?kù)o 微風(fēng)拂面而來(lái) 帶來(lái)絲絲涼爽 安撫...
    rhathymia閱讀 383評(píng)論 26 4

友情鏈接更多精彩內(nèi)容