採集方案策略之App抓包
原文地址:採集方案策略之App抓包
採集方案策略設計
在群里看到有人詢問餓了么的參數,正好感興趣,就來時間一番。
這裡引用下大佬的一段話:
首先大的地方,我們想抓取某個數據源,我們要知道大概有哪些路徑可以獲取到數據源,基本上無外乎三種:
- PC端網站
- 針對移動設備響應式設計的網站(也就是很多人說的H5, 雖然不一定是H5);
- 移動App
原則是能抓移動App的,最好抓移動App,如果有針對移動設備優化的網站,就抓針對移動設備優化的網站,最後考慮PC網站。因為移動App基本都是API很簡單,而移動設備訪問優化的網站一般來講都是結構簡單清晰的HTML,而PC網站自然是最複雜的了;
針對PC端網站和移動網站的做法一樣,分析思路可以一起講,移動App單獨分析。
其實很多網頁都有移動端,像微博,我知道這三個:
- http://weibo.com
- http://weibo.cn
- http://m.weibo.cn
最簡單的當然是第二種了,對於今天的受害者——餓了么來說,當然,首選也是移動端。
餓了么抓包分析
這裡抓包工具選擇Fiddler,這裡不講如何配置,具體參考 用Fiddler對Android應用進行抓包
下面打開手機的餓了么,原本以為會有數據,結果,竟然是這樣
去詢問了專業人士,了解了有些應用不允許用戶抓包,會有相應的限制。好吧,這就能難倒我了嗎??
當我切換到發現類目下,發現有奇怪的提示
在瘋狂點擊繼續訪問後,我終於可以正常訪問了。
那麼就可以在Fiddler中查看對應的數據了。這裡直接把介面展示出來:餓了么介面
瀏覽器直接打開,貌似沒有啥驗證
具體分析裡面的參數
offset:20nlimit:40nlatitude:39.93245nlongitude:116.50097n
有4個參數, offset
和 limit
就很常見了,翻頁和每頁的數據,至於 latitude
和 longitude
仔細觀察就知道,經緯度嘛,把它該修改為你想採集的位置的經緯度就好。
抓包分析之後,接下來採集數據就很簡單了,數據欄位標識:
food_id
是商品ID,介面是:https://www.ele.me/restapi/shopping/v1/foods?food_ids%5B%5D=712859937
打開此鏈接就是商品詳情內容
可愛的小籠包
restaurant_id
是店鋪ID,介面 https://www.ele.me/shop/157458556
打開就是店鋪詳情頁,當然,也有移動端:https://h5.ele.me/shop/#id=157458556
這樣進行商品採集就比較輕鬆了。
好餓,容我先點個外賣。
微信公眾號抓包分析
既然都看了餓了么,那也來看看微信吧。
使用Fiddler抓出來的curl命令
curl -k -i --raw -o 0.dat "https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzA4NzA1OTc5Nw==&f=json&offset=20&count=10&appmsg_token=936_iWFH%%252F9haOTPb6GApBj6wXjPGKg9eeU7slzmH2Q~~" -H "User-Agent: Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.5.23.1180 NetType/WIFI Language/zh_CN" -H "Accept-Encoding: gzip, deflate" -H "Accept: */*" -H "Connection: keep-alive" -H "Host: mp.weixin.qq.com" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA4NzA1OTc5Nw==&scene=124&devicetype=android-25&version=26051732&lang=zh_CN&nettype=WIFI&a8scene=3&pass_ticket=lLCqBwwrZ581bGDqrEkRsgjKkWYNPdUBs9grSaFjd79hSX0mdvR8%%2BLUbHoWGGBEp&wx_header=1" -H "Accept-Language: zh-CN,en-US;q=0.8" -H "Cookie: pgv_pvi=4831552512; pgv_si=s989715456; sd_userid=18991505459750403; sd_cookie_crttime=1505459750403; tvfe_boss_uuid=a8e4e4f1ab6cd93d; pgv_info=ssid=s8735681072; pgv_pvid=4201362299; rewardsn=8d8b49dfb1811092eefe; wxtokenkey=19643e9f2ee569a10857d365bba88556d220fd33c1a0666b5d028a72b5bcd901; wxuin=838107840; devicetype=android-25; version=26051732; lang=zh_CN; pass_ticket=lLCqBwwrZ581bGDqrEkRsgjKkWYNPdUBs9grSaFjd79hSX0mdvR8+LUbHoWGGBEp; wap_sid2=CMCF0o8DElxUVDVJR3o1ZldpbDlHWWdjQ0xMU3lxM3BWTUozTFFuZFhrUEJaanhoSmZ1aEVncnU0VzFIaWR3QkVVVXFuTUlMTlkxNFZjTnRCMEt1VHJjV3UzQVNOYWdEQUFBfjD6rvjRBTgMQJRO" -H "Q-UA2: QV=3&PL=ADR&PR=WX&PP=com.tencent.mm&PPVN=6.5.23&TBSVC=43602&CO=BK&COVC=043632&PB=GE&VE=GA&DE=PHONE&CHID=0&LCID=9422&MO= MI6 &RL=1080*1920&OS=7.1.1&API=25" -H "Q-GUID: 569ade09b5931656e4f49098113e88cb" -H "Q-Auth: 31045b957cf33acf31e40be2f3e71c5217597676a9729f1b" -H "Content-Type: application/json; charset=UTF-8" -H "Cache-Control: no-cache, must-revalidate" -H "RetKey: 14" -H "LogicRet: 0"n
直接在瀏覽器中打開,會提示錯誤
{nret: -3,nerrmsg: "no session",ncookie_count: 0n}n
使用postman分析,最後Python的代碼是
import requestsnurl = "https://mp.weixin.qq.com/mp/profile_ext"nquerystring = {"action":"getmsg","__biz":"MzA4NzA1OTc5Nw==","f":"json","offset":"20","count":"10","appmsg_token":"936_iWFH%2F9haOTPb6GApBj6wXjPGKg9eeU7slzmH2Q~~"}nheaders = {n user-agent: "Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.5.23.1180 NetType/WIFI Language/zh_CN",n accept-encoding: "gzip, deflate",n accept: "*/*",n connection: "keep-alive",n host: "mp.weixin.qq.com",n x-requested-with: "XMLHttpRequest",n referer: "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA4NzA1OTc5Nw==&scene=124&devicetype=android-25&version=26051732&lang=zh_CN&nettype=WIFI&a8scene=3&pass_ticket=lLCqBwwrZ581bGDqrEkRsgjKkWYNPdUBs9grSaFjd79hSX0mdvR8%%2BLUbHoWGGBEp&wx_header=1",n accept-language: "zh-CN,en-US;q=0.8",n cookie: "pgv_pvi=4831552512; pgv_si=s989715456; sd_userid=18991505459750403; sd_cookie_crttime=1505459750403; tvfe_boss_uuid=a8e4e4f1ab6cd93d; pgv_info=ssid=s8735681072; pgv_pvid=4201362299; rewardsn=8d8b49dfb1811092eefe; wxtokenkey=19643e9f2ee569a10857d365bba88556d220fd33c1a0666b5d028a72b5bcd901; wxuin=838107840; devicetype=android-25; version=26051732; lang=zh_CN; pass_ticket=lLCqBwwrZ581bGDqrEkRsgjKkWYNPdUBs9grSaFjd79hSX0mdvR8+LUbHoWGGBEp; wap_sid2=CMCF0o8DElxUVDVJR3o1ZldpbDlHWWdjQ0xMU3lxM3BWTUozTFFuZFhrUEJaanhoSmZ1aEVncnU0VzFIaWR3QkVVVXFuTUlMTlkxNFZjTnRCMEt1VHJjV3UzQVNOYWdEQUFBfjD6rvjRBTgMQJRO",n q-ua2: "QV=3&PL=ADR&PR=WX&PP=com.tencent.mm&PPVN=6.5.23&TBSVC=43602&CO=BK&COVC=043632&PB=GE&VE=GA&DE=PHONE&CHID=0&LCID=9422&MO= MI6 &RL=1080*1920&OS=7.1.1&API=25",n q-guid: "569ade09b5931656e4f49098113e88cb",n q-auth: "31045b957cf33acf31e40be2f3e71c5217597676a9729f1b",n content-type: "application/json; charset=UTF-8",n cache-control: "no-cache",n retkey: "14",n logicret: "0",n }nresponse = requests.request("GET", url, headers=headers, params=querystring, verify=False)nprint(response.json())n
這個時候的參數有
action:getmsgn__biz:MzA4NzA1OTc5Nw==nf:jsonnoffset:20ncount:10nappmsg_token:936_iWFH%%252F9haOTPb6GApBj6wXjPGKg9eeU7slzmH2Q~~n
目前還不清楚這些參數的作用,再抓一個試試
action:getmsgn__biz:MjM5NzI3NDg4MA==nf:jsonnoffset:10ncount:10nappmsg_token:936_kFNdYU3DJ%%252B%%252BVfHfEGImXqB5DMbIeqtSR75ZFZQ~~n
估計就是 __biz
和 appmsg_token
這兩個參數對應不同的公眾號
對了,上面的代碼會出現一個問題
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warningsn InsecureRequestWarning)n
解決方法
from requests.packages import urllib3nurllib3.disable_warnings()n
App的分析
App類使用的工具是Fidder,手機和電腦在一個區域網內,先用Fidder配置好埠,然後手機設置代理,ip為電腦的ip,埠為設置的埠,然後如果手機上請求網路內容時,Fidder會顯示相應地請求,那麼就ok了,分析的大體邏輯基本一致,限制會相對少很多,但是也有幾種情況需要注意:
- 加密,App有時候也有一些加密的欄位,這個時候,一般來講都會進行反編譯進行分析,找到對應的代碼片段,逆推出加密方法;
- gzip壓縮或者base64編碼,base64編碼的辨別度較高,有時候數據被gzip壓縮了,不過Charles都是有自動解密的;
- https證書,有的https請求會驗證證書, Fidder提供了證書,可以在官網找到,手機訪問,然後信任添加就可以。
最後,祝大家聖誕節快樂
推薦閱讀:
※你打算什麼時候轉到Python3?
※使用Python實現豆瓣閱讀書籍信息的獲取
※昨天看球時,球迷都說了啥——彈幕抓取與分析