2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

怎么樣抓取微信小程序

 鷹兔牛熊眼 2019-05-05

閱讀文本大概需要 12 分鐘。

一 爬蟲萬能公式

最近癡海接到一些新的需求,要抓取微信小程序上的內(nèi)容。寫過爬蟲的同學都知道,無論什么爬蟲大體的思路都是相的,都是要分析網(wǎng)絡請求地址,模擬發(fā)送請求,然后解析返回的數(shù)據(jù),最后保存相應的信息。

這里就可以給大家總結一個爬蟲萬能公式:

爬蟲程序 = 網(wǎng)絡請求 + 解析數(shù)據(jù) + 保存數(shù)據(jù)

所有的爬蟲都離不開這三個核心點,有些復雜的爬蟲無非是在每個部分添加些別的內(nèi)容。比如在網(wǎng)絡請求部分,你需要添加請求頭,偽裝下自己的請求,讓它看起來像一個正常人發(fā)送的請求。還有些網(wǎng)站需要破解驗證碼等等。而在解析數(shù)據(jù)中你需要熟悉至少一種解析方式,比如 Xpath、正則、JQuery、BS4 等。保存數(shù)據(jù)就需要你選擇保存到哪里是 Mysql 還是 MongoDB 等等,甚至你要需要寫些去重的策略等等。

每個部分細分開還有非常多的內(nèi)容,但爬蟲萬變不離其宗,總的框架就是這三部分。細分的內(nèi)容以后在慢慢寫文章都教給大家。

今天我們就通過上面核心公式,通過如何抓取微信小程序,來講解手機平臺如何進行抓包。

二 微信小程序抓取

現(xiàn)在隨著移動互聯(lián)網(wǎng)的崛起,很多產(chǎn)品只有手機端,不會再花過多的時間和精力去搭建網(wǎng)頁端的平臺。所以做爬蟲也一定要懂得如何在手機端上進行數(shù)據(jù)抓取。

手機端跟網(wǎng)頁端的抓取大同小異,只不過手機端的請求路徑,你是不能直觀的看到。這里就需要借助一些代理軟件來輔助分析手機端上的網(wǎng)絡請求。

2.1 常用代理軟件

手機上抓包原理其實很簡單,就是在你手機上搭建一個代理,所有的請求都會走你搭建的代理,這樣你就可以分析對應的請求。

而最經(jīng)常用的代理軟件有兩個:1 Charles、2 Fiddler。

1 Charles

官網(wǎng):

https://www./

適用平臺:Windows、Mac

Charles 俗稱的花瓶,是在 PC 端常用的網(wǎng)絡封包截取工具,在做移動開發(fā)時,我們?yōu)榱苏{(diào)試與服務器端的網(wǎng)絡通訊協(xié)議,常常需要截取網(wǎng)絡封包來分析。 

具體的使用教程可以看下面的鏈接,非常的詳細的介紹了 Charles 各方面的功能。

https:///post/5b8350b96fb9a019d9246c4c

2 Fiddler

官網(wǎng):

https://www./fiddler

適用平臺:Windows

Fiddler 是一個 http 調(diào)試代理,以代理服務器的方式,監(jiān)聽系統(tǒng)的 Http 網(wǎng)絡數(shù)據(jù)流動, Fiddler 也可以讓你檢查所有的 http 通訊,設置斷點,以及 Fiddle 所有的“進出”的數(shù)據(jù)。

這兩款軟件我都有使用過,都大同小異。我個人推薦大家使用 Charles,一是它兩個平臺都可適用,二是它把請求結構化,看起來非常清晰。

具體的使用教程可以看下面的鏈接

http://www./blog/cache/detail_1697.html

這里要提醒大家 2 個比較坑的點:

1 確保你的手機是否和電腦處于同一個局域網(wǎng)

2 確保你安裝了相應的證書

具體的設置方法在上面的鏈接都有講到,如果你安裝了相應的軟件之后無法抓包,就在這兩個地方檢查下是否設置正確。

手機端為分為 ios 和安卓端的,由于我手上沒有 ios 手機,今天這篇文章也就不重點介紹,如果你想在 ios 手機上抓包推薦使用 Thor 這款軟件。

2.2 安卓 7.0 以上新特性

Android 7.0 之后,系統(tǒng)默認不再信任用戶自己安裝的證書。也就是說如果你現(xiàn)在使用的安卓版本是 7.0 以上的,你自己安裝的證書,系統(tǒng)默認不再信任的。

而手機上的網(wǎng)絡請求都是 https 加密過的,沒有信任的證書,你就無非抓到包。

而要解決這個問題有以下五種辦法。

1 降低你的安卓版本

首先第一種辦法就是降低你的安卓版本到 7.0 以下,那就不會用到新的特性。但這樣的做法并不推薦。

2 使用 HttpCanary 軟件

HttpCanary 是 Android 平臺下功能最強大的抓包和注入工具,支持 HTTP、HTTPS、HTTP2 和 WebSocket 等多種協(xié)議。

GitHub 地址:

https://github.com/MegatronKing/HttpCanary

下載地址:

https://github.com/MegatronKing/HttpCanary/wiki/Downloads

使用教程:

https://github.com/MegatronKing/HttpCanary/tree/master/docs/v1/zh-CN

這個軟件在使用教程里,提供了安卓 7.0 之后的抓包解決方案。

3  Xposed + JustTrustMe

Xposed 框架(Xposed framework)是一套開放源代碼的、在 Android 高權限模式下運行的框架服務,可以在不修改 APK 文件的情況下修改程序的運行(修改系統(tǒng)),基于它可以制作出許多功能強大的模塊,且在功能不沖突的情況下同時運作。

JustTrustMe 是 Github 上的一個開源工程,他是一個 Xposed 模塊,用來禁止SS L證書驗證。以下是其簡介。

JustTrustMe:An xposed module that disables SSL certificate checking. This is useful for auditing an appplication which does certificate pinning.

具體的教程可以看這里

https://www.jianshu.com/p/310d930dd62f

Xposed 框架對 Android 7.0 及以上不太友好,容易導致變磚頭機,所以使用此方法的建議配合模擬器使用。

VirtualXposed

上面介紹了 Xposed 框架,最麻煩在于必須 Root 設備,承擔手機變磚和系統(tǒng)安全性方面的風險,對很多用戶來說上手難度門檻較高。不過,隨著黑科技般的 VirtualXposed 出現(xiàn),大家終于可以免 Root 權限直接使用 Xposed 框架了。

具體的使用可以看這篇文章:

https://www./virtualxposed.html

安裝來 VirtualXposed 之后,相當于給手機安裝了一個虛擬環(huán)境,你在這個虛擬環(huán)境中安裝需要抓取的 APP,之后配合 Charles 就可以進行抓包分析了。


5  把 Charles 證書設置為系統(tǒng)證書

前面說過安卓 7.0 之后第三方安裝的證書,系統(tǒng)是不會給予信任的。那么我們反過來想,只要把第三方證書設置成系統(tǒng)證書就好。

需要注意這個方法也需要 root 權限,但屬于一勞永逸的做法。

把普通證書安裝到系統(tǒng)證書的方法可以看下面的鏈接

https://github.com/XndroidDev/Xndroid/issues/9#issuecomment-350525543

三 實戰(zhàn)練習

上面一共介紹了五種在安卓 7.0 之后抓取方式,每種方法都有自己的優(yōu)缺點。大家盡量以易用的原則去選取,接下來我就使用 HttpCanary 這款軟件來給大家實戰(zhàn)抓取一個小程序。

抓取目標:MOTI商城一款產(chǎn)品詳細信息

小程序搜索「MOTI商城」即可找到。

接下來我們就用開頭說到的爬蟲核心公式來一步步的拆解:

爬蟲程序 = 網(wǎng)絡請求 + 解析數(shù)據(jù) + 保存數(shù)據(jù)

1 分析小程序網(wǎng)絡請求

首先根據(jù)上面的 HttpCanary 教程安裝相應的軟件,然后我們開始進行抓包分析。

這是我們點擊進入小程序首頁看到的一些請求,我們在點擊小程序里任意一個商品,在看看都有哪些新的請求。

注意到這里多了一個 detail 的請求,我們點開詳情具體查看。

總攬頁信息

通過總攬頁我們知道了數(shù)據(jù)的請求地址:

https://motiapi./api/goods/detail

這個請求還是一個 POST 的請求。

請求頁信息

通過請求頁信息我們知道了請求頭的構造都有哪些:

并且還知道請求的參數(shù),我們在請求頁點擊底部的 Text 就可以看到。

所以我們在發(fā)送請求的時候,還需要把 token、for_wx_examine 和 goods_id 這三個參數(shù)一起帶上。

響應頁信息

通過響應頁信息我們知道,請求返回的數(shù)據(jù)是 json 格式。

這樣我們整個請求就分析完畢了,整個抓取就非常的清晰了。通過分析我們可以知道要發(fā)送一個 POST 的請求,請求的地址是

https://motiapi./api/goods/detail

這個 POST 的請求是需要帶上三個參數(shù)的即:token 、for_wx_examine 和 goods_id

在程序中我們只需要把請求頭信息帶上,發(fā)送一個 POST 的請求就可以拿到數(shù)據(jù)了。

解析小程序數(shù)據(jù)

此次的小程序數(shù)據(jù)是 json 格式的,所以我們在第一步發(fā)送了請求之后,只需要調(diào)用 response.json() 函數(shù)就可以得到具體的數(shù)據(jù)了。

3 保存小程序數(shù)據(jù)

數(shù)據(jù)比較簡單,結構也非常清晰,所以我就以 json 的格式保存到本地文件中即可。

關鍵的代碼(這里面的 token 有可能會失效,還是以你們自己抓到的為主):

def get_sale(goods_id):
    headers_v2 = {
        'charset''utf-8',
        'Accept-Encoding''gzip',
        'referer''ttps://servicewechat.com/wx79a7f4da1fc3bdd6/39/page-frame.html',
        'content-type''application/x-www-form-urlencoded',
        'User-Agent''Mozilla/5.0 (Linux; Android 8.0.0; MIX 2 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.99 Mobile Safari/537.36 MicroMessenger/7.0.4.1420(0x27000439) Process/appbrand2 NetType/WIFI Language/zh_CN',
        'Content-Length''65',
        'Host''motiapi.',
        'Connection''Keep-Alive'
    }

    url_v2 = 'https://motiapi./api/goods/detail'
    params_v2 = {
        'token''e5f5c910d74190f5672805f3eadc8a',
        'for_wx_examine'0,
        'goods_id'93
    }
    response = requests.post(url_v2, data=params_v2, headers=headers_v2)

    with open('moti_{}.json'.format(time.strftime('%Y-%m-%d')), 'a'as f:
        f.write(json.dumps(response.json(), ensure_ascii=False, indent=2) + '\n')
    data = response.json()
    data['name'] = 'moti'
    col.insert_one(data)
    print(response.json())

到此整個教程就結束了,覺得教程不錯的同學不妨點個在看,就是給癡海最大的支持。

人必有癡,而后有成

點擊無 bug ??

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多