距離 respage01 已經有一個月左右沒有作平常研究了,期間也有了些迷茫,迷茫平常研究的價值到底在哪裏,以及業餘時間的捉襟見肘。可是迷茫歸迷茫,或者越是迷茫更是要去設法瞭解世界。respage02 的目標是爲了研究小區域人流情況。 小區域的人流情況是我一直想獲取的一個信息,這裏的「情況」是咱們所能獲取的最大信息,因爲人們出行方式愈來愈多樣化,除了政府在路口安裝監控之外,我以爲已經很難完整表示人流量了。咱們能夠作的只能是經過某種或某些出行途徑來片面地反映這種「情況」。python
本身關於片面掌握人流情況的腦洞有這麼幾個:git
腦洞的意義就是讓你們有時間能夠去研究一下,我只是選擇了最方便的共享單車數據,緣由在於共享單車移動速度慢,在對爬取速度沒追求的狀況下,也能夠有但願得到研究結果。github
關於獲取共享單車(摩拜)數據的文章已經有不少,主要思路仍是經過研究單車微信小程序的 api,只要簡單抓包就能夠找到規律,以下接口就能夠獲取某一位置周邊的單車信息,這個和獲取百度地圖 POI 數據相似,儘可能增長採集點,能夠獲取儘可能完整的數據,由於根據觀察,附近單車接口獲取到數量是作了限制的:小程序
URL = "https://mwx.mobike.com/nearby/nearbyBikeInfo?biketype=0" + \
"&latitude=" + lat + \
"&longitude=" + lng + \
"&userid=" + userId + \
"&citycode=0579"
複製代碼
仍是採用與獲取 POI 數據同樣的矩形窗口掃描的方式,爲了稍微加快些速度,我簡單地增長了一個進程來同時採集,爲了下降封號風險,我也準備了兩個 userid,同時也準備了兩個掃描區域。(進階採集,多進程或者協程+代理的方式來更快更全的採集,可是我目前不須要)微信小程序
## 江南兩個矩形區域
BigRect1 = {
'left': {
'x': 119.634998,
'y': 29.046372
},
'right': {
'x': 119.6727628,
'y': 29.077628
}
}
BigRect2 = {
'left': {
'x': 119.628268,
'y': 29.072232
},
'right': {
'x': 119.67208,
'y': 29.098397
}
}
複製代碼
完整代碼仍是見 GitHub - roubo/roubospiker: 一些解決生活問題的小爬蟲 實現一個 work 方法,並開啓兩個採集進程:(注意日誌文件要分開建立,以避免併發寫花)api
def worker(bigrect, userId, FileKey):
today = time.strftime("%Y_%m_%d_%H")
for count in range(0, 10):
logfile = open("./log/" + FileKey + "-" + str(count) + '_' + today + ".log", 'a+', encoding='utf-8')
file = open("./result/" + FileKey + "-" + str(count) + '_' + today + ".txt", 'a+', encoding='utf-8')
for index in range(int(WindowSize['xNum'] * WindowSize['yNum'])):
lng, lat = getSmallRect(bigrect, WindowSize, index)
requestMBikeApi(lat=lat, lng=lng, index=index, file=file, logfile=logfile, userId=userId)
time.sleep(1200)
def main():
userIds = tool.getMBikeUserID()
p1 = multiprocessing.Process(target=worker, name='p1', args=(BigRect1, userIds[0], 'shareBike01'))
p2 = multiprocessing.Process(target=worker, name='p2', args=(BigRect2, userIds[1], 'shareBike02'))
p1.start()
p2.start()
複製代碼
實現採集 + 存儲 + 展現的過程放到下一稿咯。微信