Python 爬蟲——抖音App視頻抓包

APP抓包

前面我們瞭解了一些關於 Python 爬蟲的知識,不過都是基於 PC 端瀏覽器網頁中的內容進行爬取。現在手機 App 用的越來越多,而且很多也沒有網頁端,比如抖音就沒有網頁版,那麼上面的視頻就沒法批量抓取了嗎?

答案當然是 No!對於 App 來說應用內的通信過程和網頁是類似的,都是向後臺發送請求,獲取數據。在瀏覽器中我們打開調試工具就可以看到具體的請求內容,在 App 中我們無法直接看到。所以我們就要通過抓包工具來獲取到 App 請求與響應的信息。關於抓包工具有 Wireshark,Fiddler,Charles等。今天我們講一下如何用 Fiddler 進行手機 App 的抓包。

Fiddler 的工作原理相當於一個代理,配置好以後,我們從手機 App 發送的請求會由 Fiddler 發送出去,服務器返回的信息也會由 Fiddler 中轉一次。所以通過 Fiddler 我們就可以看到 App 發給服務器的請求以及服務器的響應了。

Fiddler 安裝配置

我們安裝好 Fiddler 後,首先在菜單 Tool>Options>Https 下面的這兩個地方選上。

圖一.png

然後在 Connections 標籤頁下面勾選上 Allow remote computers to connect,允許 Fiddler 接受其他設備的請求。
同時要記住這裏的端口號,默認是 8088,到時候需要在手機端填。

圖二.png

配置完畢,保存後,一定關掉 Fiddler 重新打開。

手機端配置

確保手機和電腦在同一個局域網中,我們先看下計算機的 IP 地址,在 cmd 中輸入 ipconfig 就可以看到。我電腦用的是無線網,所以 IP 地址爲 192.168.1.3。

圖三.png

打開手機無線連接,選擇要連接的熱點。長按選擇修改網絡,在代理中填上我們電腦的 IP 地址和 Fiddler 代理的端口。如下圖所示:

圖四.png

圖五.png

保存後,在手機原生瀏覽器打開 http://192.168.1.3:8008 ,就是上面我們的計算機 IP 和端口。這一步我在夸克瀏覽器中打開是不行的,一定要到手機自帶的瀏覽器打開。

打開後,點擊下圖鏈接,下載證書,然後安裝證書。

電腦端瀏覽器也需要打開此地址,安裝證書,方便以後對瀏覽器的抓包操作。

圖六.png

安裝後就萬事 OK 了,可以用手機打開 App ,在 Fiddler 上愉快的抓包了。

抓包

我們打開抖音 App,會發現 Fiddler 上出來很多連接。我們先清空沒用的連接信息,然後滑動到某個人的主頁上,來查看他發佈過的所有視頻,同時在 Fiddler 上找到視頻鏈接。

圖七.png

經過觀察篩選我們可以看出上圖就是我們需要的請求地址,這個地址其實是可以在瀏覽器上打開的,但是我們需要改一下瀏覽器的User-Agent,我用的是Firefox的插件,打開後和 Fiddler 右邊的信息是一致的。我們看下 Fiddler 右邊該請求的響應信息。

圖八.png

看到返回了一個 JSON 格式的信息,其中aweme_list 就是我們需要的視頻地址,has_more=1 表示往上滑動還會加載更多。之後就可以寫代碼了。

代碼

代碼很簡單,和我們前幾篇講的一樣,直接用 requests 請求相應鏈接即可。

代碼僅做爲一個簡單的例子,僅僅下載當前頁面的內容,如果要下載全部的視頻,可以根據當次返回 JSON 結果中的 has_more 和 max_cursor 參數構造出新的 URL 地址不斷的下載。

URL 中的 user_id 可以根據自己要爬取的用戶更改,可以通過把用戶分享到微信,然後在瀏覽器中打開鏈接,在打開的 URL 中可以看到用戶的 user_id。

import requests
import urllib.request
def get_url(url):
    headers = {'user-agent': 'mobile'}
    req = requests.get(url, headers=headers, verify=False)
    data = req.json()
    for data in data['aweme_list']:
        name = data['desc'] or data['aweme_id']
        url = data['video']['play_addr']['url_list'][0]
        urllib.request.urlretrieve(url, filename=name + '.mp4')


if __name__ == "__main__":
    get_url('https://api.amemv.com/aweme/v1/aweme/post/?max_cursor=0&user_id=98934041906&count=20&retry_type=no_retry&mcc_mnc=46000&iid=58372527161&device_id=56750203474&ac=wifi&channel=huawei&aid=1128&app_name=aweme&version_code=421&version_name=4.2.1&device_platform=android&ssmix=a&device_type=STF-AL10&device_brand=HONOR&language=zh&os_api=26&os_version=8.0.0&uuid=866089034995361&openudid=008c22ca20dd0de5&manifest_version_code=421&resolution=1080*1920&dpi=480&update_version_code=4212&_rticket=1548080824056&ts=1548080822&js_sdk_version=1.6.4&as=a1b51dc4069b2cc6252833&cp=dab7ca5f68594861e1[wIa&mas=014a70c81a9db218501e1433b04c38963ccccc1c4cac4c6cc6c64c')

運行後就可以得到視頻列表:
圖九.png

有任何疑問,歡迎加我微信交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章