說起Python爬蟲插勤,很多人第一個反應(yīng)可能會是Scrapy或者Pyspider,但是今天文章里用到是Python下一個叫Mitmproxy的抓包工具凝颇,對付一些非常規(guī)的數(shù)據(jù)獲取還是很有效的蜓洪。
不過凡事都是有利有弊东臀,一來麻煩,二來呢不會自己動,還得手動(或者按鍵精靈也可以傲涔恪)硫眯。
自從滴滴的拼車業(yè)務(wù)全國下線之后,一直專注拼車的某拼車APP在背后默默替老大哥照顧著那些可憐的乘客择同。上周五下班的時候两入,本來想用某拼車APP搭個順風(fēng)車回家,沒想到下班高峰期的時候敲才,某拼車APP居然掛了裹纳,過了十幾分鐘才緩過來,心里好奇紧武,就想爬一下某拼車APP的數(shù)據(jù)剃氧,看看周邊上下班拼車的情況。
知己知彼阻星,百戰(zhàn)不殆
對于APP類的爬蟲朋鞍,首先想到的就是抓包,macOS下常用的就是Charles和mitmproxy這兩款工具了妥箕,而mitmproxy由于支持?jǐn)r截和腳本又深得我愛滥酥,用法的話這里就不具體展開介紹了。
啟動mitmweb(mitmproxy家那個有頁面的兄弟)抓包工具畦幢,手機上打開某拼車APP客戶端坎吻,查看附近訂單(已提前認(rèn)證車主,并切換到車主身份)
對應(yīng)一下就可以發(fā)現(xiàn)呛讲,查詢附近訂單的接口URL就是這個getNearbyBookingRideList,于是我很天真地就拿著這個接口禾怠,和抓包數(shù)據(jù),就去請求了
結(jié)果人家告訴我
{“code”:205,”message”:”簽名錯誤贝搁!”}
因為客戶端APP有個簽名算法吗氏,根據(jù)POST給服務(wù)器的參數(shù)計算的,除非我破了人家APP雷逆,然后把算法給找出來弦讽,想想還是算了,費神費力(主要是我壓根不會)膀哲!
這個法子行不通往产,只能換個法子了
神器在手,天下我有
前面提到mitmproxy有個帶web界面的兄弟叫mitmweb某宪,其實還有一個支持腳本的兄弟叫mitmdump仿村,寫好腳本
把腳本存為 111.py,然后終端執(zhí)行命令:
mitmdump -s 111.py -p 8080
剩下要做的就是不斷去某拼車APP上劃幾下兴喂,至于數(shù)據(jù)那塊蔼囊,就交給Dump兄弟就好了
嗯焚志,看到了嘛~想看哪,手指就滑哪畏鼓,越滑越有酱酬!
再接下來就是需要把我們抓到的數(shù)據(jù)存起來,以備后期使用云矫,這里我用的是Mongodb膳沽,雖然也是第一次用,為了方便點让禀,另外寫了個插入數(shù)據(jù)的方法挑社,再在爬蟲文件里面調(diào)用。
再到我們數(shù)據(jù)庫看看堆缘,已經(jīng)碩果累累了滔灶,不夠的話就再多滑幾下。
數(shù)據(jù)抓取的思路大概就是這樣吼肥,因為沒時間搗鼓所以就沒上APP自動化录平,其實可以搞個 模擬器+按鍵精靈,或者appium缀皱,就是太懶了怕麻煩斗这,上班的時候劃一劃就當(dāng)運動了
數(shù)據(jù)展示
時間問題,暫時沒做數(shù)據(jù)分析啤斗,不過數(shù)據(jù)挺干凈的表箭,也不需要處理啥
關(guān)鍵字Mongodb、Pandas钮莲、Pyecharts
拿了周六杭州跨城順風(fēng)車數(shù)據(jù)結(jié)合阿里云的DataV做了個簡單的飛線圖免钻,會動的那種,點擊閱讀原文可以查看動圖崔拥。