爬取抖音短視訊改良版
阿新 • • 發佈:2020-05-05
[toc]
#使用更簡單的方法
在我之前的一篇部落格中,我用了構造網址的方法來獲取抖音短視訊,但是在今天我又一次的研究抖音短視訊的時候發現了一個更加簡單的方法,發現我之前的分析實在是太過繁瑣了,所以有寫了一篇部落格來記錄下這個方法。([上一篇部落格](https://www.cnblogs.com/cherish-hao/p/12815603.html)就當做是就記錄下分析網頁的思路吧,就不作更改了)
與上一篇部落格不同的是,這個方法可以省略掉大量的分析步驟
隨便開啟一個抖音個人主頁,我選擇的是[愛奇藝體育](http://v.douyin.com/KU7Uwe),接著右鍵檢查網頁元素,點選network選項卡下的xhr選項,分析抓到的包
![](https://img2020.cnblogs.com/blog/1971945/202005/1971945-20200504151404736-686493332.png)
點到preview選項卡,點選video->download_addr->url_list
![](https://img2020.cnblogs.com/blog/1971945/202005/1971945-20200504151633477-446496177.png)
發現這下面跟著的兩個網址正好是視訊的網址(根本不需要構造,只是這個網址藏的有點深,需要非常耐心的尋找),開啟網址檢視:
![](https://img2020.cnblogs.com/blog/1971945/202005/1971945-20200504151920010-876027415.png)
ok,現在我們只要想辦法提取到它就大功告成了
我這次使用的方法中用到了jsonpath模組,直接pip下載就可以了:
```
pip install jsonpath
```
![](https://img2020.cnblogs.com/blog/1971945/202005/1971945-20200505003602586-98275423.png)
#程式碼
```
import requests
import json
import jsonpath
class Douyin:
def page_num(self,max_cursor):
#隨機碼
random_field = '00nvcRAUjgJQBMjqpgesfdNJ72&dytk=4a01c95562f1f10264fb14086512f919'
#網址的主體
url = 'https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAU7Bwg8WznVaafqWLyLUwcVUf9LgrKGYmctJ3n5SwlOA&count=21&max_cursor=' + str(max_cursor) + '&aid=1128&_signature=' + random_field
#請求頭
headers = {
'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
}
response = requests.get(url,headers=headers).text
#轉換成json資料
resp = json.loads(response)
#提取到max_cursor
max_cursor = resp['max_cursor']
#遍歷
for data in resp['aweme_list']:
# 視訊簡介
video_title = data['desc']
#使用jsonpath語法提取download_addr
video_url = jsonpath.jsonpath(data,'$..download_addr')
for a in video_url:
#提取出來第一個連結地址
video_realurl = a['url_list'][1]
# 請求視訊
video = requests.get(video_realurl, headers=headers).content
with open('t/' + video_title, 'wb') as f:
print('正在下載:', video_title)
f.write(video)
#判斷停止構造網址的條件
if max_cursor==0:
return 1
else:
douyin.page_num(max_cursor)
if __name__ == '__main__':
douyin = Douyin()
douyin.page_num(max_cursor=0)
```
#優點
這個方法的優點是可以省去很大一部分的分析網址的步驟,而且沒有呼叫到webdriver(可以不限制瀏覽器),速度也會有顯著提升
#不足
還是沒有解決隨機生成字串的問題,操作比較麻煩
#使用方法
![程式碼使用方法](http://www.alltoall.net/qfy-content/uploads/alltoall/download/www.alltoall.net_simplescreenrecorder-2020-05-05_00.58.56_qePpN4z