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 下面的這兩個地方選上。
然後在 Connections 標籤頁下面勾選上 Allow remote computers to connect,允許 Fiddler 接受其他裝置的請求。
同時要記住這裡的埠號,預設是 8088,到時候需要在手機端填。
配置完畢,儲存後,一定關掉 Fiddler 重新開啟。
手機端配置
確保手機和電腦在同一個區域網中,我們先看下計算機的 IP 地址,在 cmd 中輸入 ipconfig就可以看到。我電腦用的是無線網,所以 IP 地址為 192.168.1.3。
開啟手機無線連線,選擇要連線的熱點。長按選擇修改網路,在代理中填上我們電腦的 IP 地址和 Fiddler 代理的埠。如下圖所示:
儲存後,在手機原生瀏覽器開啟 http://192.168.1.3 :8008 ,就是上面我們的計算機 IP 和埠。這一步我在夸克瀏覽器中開啟是不行的,一定要到手機自帶的瀏覽器開啟。
開啟後,點選下圖連結,下載證書,然後安裝證書。
電腦端瀏覽器也需要開啟此地址,安裝證書,方便以後對瀏覽器的抓包操作。
安裝後就萬事 OK 了,可以用手機開啟 App ,在 Fiddler 上愉快的抓包了。
抓包
我們開啟抖音 App,會發現 Fiddler 上出來很多連線。我們先清空沒用的連線資訊,然後滑動到某個人的主頁上,來檢視他釋出過的所有視訊,同時在 Fiddler 上找到視訊連結。
經過觀察篩選我們可以看出上圖就是我們需要的請求地址,這個地址其實是可以在瀏覽器上開啟的,但是我們需要改一下瀏覽器的User-Agent,我用的是Firefox的外掛,開啟後和 Fiddler 右邊的資訊是一致的。我們看下 Fiddler 右邊該請求的響應資訊。
看到返回了一個 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∾=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')
執行後就可以得到視訊列表:
有任何疑問,歡迎加我微信交流。