【Python爬蟲】| XPANX獲取抖音APP小視屏

需求:抖音上看到漂亮的小姐姐,想保存下來,該如何是好?

前兩天一直在說,有空弄個爬取APP數據的教程,今天來實現下

 

思路:藉助抓包工具fiddler完成

難度:★★★★(記住一條準則,只要是明文展示的數據(你可以看到的),都是可以獲取的,只不過難易程度不同。大部分APP其實只是web加個殼)

準備工作:

1、Python+Pycharm社區版(社區版免費而且夠用,不需要去破解專業版)

2、fiddler抓包工具

3、一部root的安卓機,或者模擬器

 

Github地址:https://github.com/poplangfan/Python100 (這裏應該不能跳轉,後臺回覆源代碼即可獲取github鏈接)

 

先把思路梳理一下,要想下載抖音視頻,就要知道它的真實url地址,這是最核心的。

首先,要藉助fiddler抓包,獲取訪問抖音時訪問的真實地址,這一步比較繁瑣,沒用過fiddler的人可能比較陌生,我找了一篇教程,或者也可以自己去搜,網上很多;

https://www.cnblogs.com/woaixuexi9999/p/9247705.html

 

需要注意的是,抖音有SSL加密,所有需要一部root的手機,或者模擬器,不然按照上面的教程你會發現APP用fiddler抓包連不上網,也就無法抓包了,詳情見:

https://www.zhihu.com/question/60618756, 親測有效,我爲了省事,使用的夜神模擬器。

 

準備工作完成後,就可以愉快的擼代碼了,抖音反爬措施比較嚴,經常性因爲訪問頻率過高拒絕訪問,要麼使用代理,要麼自己等一會。

 

 

第一步,基本信息準備好,在fiddler裏都有哦,如圖:

"""-*- coding: utf-8 -*-@Author  : blyang@Time    : 2020/1/5 21:17"""import reimport timeimport requestsimport jsonfrom jsonpath import jsonpath
requests.packages.urllib3.disable_warnings()  # 此處關閉一個警告,去掉也無影響cookie = "你的cookie"UA = "你的User-Agent"headers = {  # 這些信息都可以在Fiddler上獲取    'Connection': 'keep-alive',    'Cookie': cookie,    'User-Agent': UA,    'X-Tt-Token': 'xx',    'x-tt-trace-id': 'xx',    # 'Accept-Encoding': 'gzip, deflate, br',此處去掉,不然返回的數據亂碼    'X-Gorgon': 'xx',    'X-Khronos': 'xx',    'x-common-params-v2': 'xx',}

 

第二步,獲取真實URL:

 

def get_movie_list():    # 抓取到的一個鏈接,一個鏈接裏有十個視頻    url = "http://api3-normal-c-lq.amemv.com/aweme/v1/aweme/post/?source=0&max_cursor=1572668155000&sec_user_id=MS4wLjABAAAAElqvSzZgxtXS7vPPcAwSGzhEHuW_Jah8LBoPYDkcnYQ&count=10&ts=1578234402&_rticket=1578234399183&mcc_mnc=46007&"    resp = requests.get(url, headers=headers, verify=False)    obj = json.loads(resp.text)    urls = jsonpath(obj, '$..share_info.share_url')  # 通過jsonpath獲取視頻的訪問路徑    true_url_list = []    for url in urls:        if len(url) > 5:            resp = requests.get(url, headers=headers)            true_url = re.findall(r'playAddr: "(.+)",', resp.text)  # 通過正則獲取真實URL地址            print(true_url)            if len(true_url) > 0:                true_url_list.append(true_url)    return true_url_list

 

第三步,交給下載函數處理:

def get_movie(url_list):    cnt = 1    for url in url_list:        resp = requests.get(url[0], headers=headers)        with open('./tik_movie/{}.mp4'.format(cnt), 'wb') as f:            f.write(resp.content)        time.sleep(2)        print("正在獲取第{}個視頻".format(cnt))        cnt += 1

if __name__ == '__main__':    true_url_list_ = get_movie_list()    print(true_url_list_)    get_movie(true_url_list_)

 

總結:基於此,你可以在以下場景中用到上述功能

  • 遇到鐘意的視頻,可以保存下來哦

     

溫馨提示:本教程僅供參考,道路千萬條,合規第一條。

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