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

APP抓包

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

答案固然是 No!對於 App 來講應用內的通訊過程和網頁是相似的,都是向後臺發送請求,獲取數據。在瀏覽器中咱們打開調試工具就能夠看到具體的請求內容,在 App 中咱們沒法直接看到。因此咱們就要經過抓包工具來獲取到 App 請求與響應的信息。關於抓包工具備 Wireshark,Fiddler,Charles等。今天咱們講一下如何用 Fiddler 進行手機 App 的抓包。android

Fiddler 的工做原理至關於一個代理,配置好之後,咱們從手機 App 發送的請求會由 Fiddler 發送出去,服務器返回的信息也會由 Fiddler 中轉一次。因此經過 Fiddler 咱們就能夠看到 App 發給服務器的請求以及服務器的響應了。json

Fiddler 安裝配置

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

圖一

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

圖二

配置完畢,保存後,必定關掉 Fiddler 從新打開。服務器

手機端配置

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

圖三

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

1000

圖片描述

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

打開後,點擊下圖連接,下載證書,而後安裝證書。ide

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

圖六

安裝後就萬事 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&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')

運行後就能夠獲得視頻列表:

圖九

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

相關文章
相關標籤/搜索