python爬取抖音視頻的實(shí)例分析
現(xiàn)在抖音的火爆程度,大家都是有目共睹的吧,之前小編在網(wǎng)絡(luò)上發(fā)現(xiàn)好玩的事情,就是去爬取一些網(wǎng)站,因此,也考慮能否進(jìn)行抖音上的破案去,在實(shí)際操作以后,真的實(shí)現(xiàn)出來了,利用自動(dòng)化工具,就可以輕松實(shí)現(xiàn)了,后有小伙伴提出把a(bǔ)ppium去掉瘦身之后也是可以實(shí)現(xiàn)的,那么看下詳細(xì)操作內(nèi)容吧。
1、mitmproxy/mitmdump抓包
import requests
path = 'D:/video/'
num = 1788
def response(flow):
global num
target_urls = ['url']
for url in target_urls:
if flow.request.url.startswith(url):
filename = path + str(num) + '.mp4
res = requests.get(flow.request.url, stream=True)
with open(filename, 'ab') as f:
f.write(res.content)
f.flush()
print(filename + '下載完成')
num += 1
2、Appium對(duì)手機(jī)進(jìn)行模擬操作
利用Start Server按鈕即可啟動(dòng)appium服務(wù)

再點(diǎn)擊Start Session即可啟動(dòng)Android手機(jī)上的抖音app并進(jìn)入到啟動(dòng)頁面
3、python腳本來驅(qū)動(dòng)app,直接在pycharm運(yùn)行即可
實(shí)例擴(kuò)展:
import requests
import json
import re
import os
from pprint import pprint as pp
import queue
class DouYin:
header = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
}
def __init__(self, url=None):
self.url = self.get_RealAddress(url)
# 獲取用戶視頻的url
self.user_video_url = 'https://www.douyin.com/aweme/v1/aweme/post/?{0}'
self.user_id = re.search(r'user/(.*)\?', self.url).group(1) # 用戶id
requests.packages.urllib3.disable_warnings()
self.session = requests.Session()
self.target_folder = '' # 創(chuàng)建文件的路徑
self.queue = queue.Queue() # 生成一個(gè)隊(duì)列對(duì)象
def user_info(self):
self.mkdir_dir()
p = os.popen('node fuck.js %s' % self.user_id) # 獲取加密的signature
signature = p.readlines()[0]
user_video_params = {
'user_id': str(self.user_id),
'count': '21',
'max_cursor': '0',
'aid': '1128',
'_signature': signature
}
# 獲取下載視頻的列表
def get_aweme_list(max_cursor=None):
if max_cursor:
user_video_params['max_cursor'] = str(max_cursor)
user_video_url = self.user_video_url.format(
'&'.join([key + '=' + user_video_params[key] for key in user_video_params])) # 拼接參數(shù)
response = requests.get(
url=user_video_url, headers=self.header, verify=False)
contentJson = json.loads(response.content.decode('utf-8')) # 將返回的進(jìn)行utf8編碼
aweme_list = contentJson.get('aweme_list', [])
for aweme in aweme_list:
video_name = aweme.get(
'share_info', None).get('share_desc', None) # 視頻的名字
video_url = aweme.get('video', None).get('play_addr', None).get(
'url_list', None)[0].replace('playwm', 'play') # 視頻鏈接
self.queue.put((video_name, video_url)) # 將數(shù)據(jù)進(jìn)隊(duì)列
if contentJson.get('has_more') == 1: # 判斷后面是不是還有是1就是還有
return get_aweme_list(contentJson.get('max_cursor')) # 有的話獲取參數(shù)max_cursor
get_aweme_list()
# 下載視頻
def get_download(self):
while True:
video_name, video_url = self.queue.get()
file_name = video_name + '.mp4'
file_path = os.path.join(self.target_folder, file_name)
if not os.path.isfile(file_path):
print('download %s form %s.\n' % (file_name, video_url))
times = 0
while times < 10:
try:
response = requests.get(
url=video_url, stream=True, timeout=10, verify=False) # 開啟流下載
with open(file_path, 'wb') as f:
for chunk in response.iter_content(1024): # 返回迭代對(duì)象
f.write(chunk)
print('下載成功')
break
except:
print('下載失敗')
times += 1
# 創(chuàng)建對(duì)應(yīng)的文件夾
def mkdir_dir(self):
current_folder = os.getcwd()
self.target_folder = os.path.join(
current_folder, 'download/%s' % self.user_id)
if not os.path.isdir(self.target_folder):
os.mkdir(self.target_folder)
# 短鏈接轉(zhuǎn)長地址
def get_RealAddress(self, url):
if url.find('v.douyin.com') < 0:
return url
response = requests.get(
url=url, headers=self.header, allow_redirects=False) # allow_redirects 允許跳轉(zhuǎn)
return response.headers['Location']
if __name__ == '__main__':
douyin = DouYin(url='http://v.douyin.com/J2B9Sk/')
douyin.user_info()
douyin.get_download()
到此這篇關(guān)于python爬取抖音視頻的實(shí)例分析的文章就介紹到這了,更多相關(guān)如何使用python爬取抖音視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python批量將圖片灰度化的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python批量將圖片灰度化的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
python基于twisted框架編寫簡(jiǎn)單聊天室
這篇文章主要為大家詳細(xì)介紹了python基于twisted框架編寫簡(jiǎn)單聊天室,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
python 中的paramiko模塊簡(jiǎn)介及安裝過程
這篇文章主要介紹了python 中的paramiko模塊簡(jiǎn)介及安裝過程,通過實(shí)例詳解給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-02-02
Python機(jī)器學(xué)習(xí)入門(六)之Python優(yōu)化模型
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)入門知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解
這篇文章主要介紹了Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Pandas中DataFrame.head()函數(shù)的具體使用
DataFrame.head()是Pandas庫中一個(gè)非常重要的函數(shù),用于返回DataFrame對(duì)象的前n行,本文主要介紹了Pandas中DataFrame.head()函數(shù)的具體使用,感興趣的可以了解一下2024-07-07
python可視化plotly?圖例(legend)設(shè)置
這篇文章主要介紹了python可視化plotly?圖例(legend)設(shè)置,主要介紹了關(guān)于python?的legend圖例,參數(shù)使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,需要的朋友可以參考下賣你具體內(nèi)容2022-02-02
python 獲取utc時(shí)間轉(zhuǎn)化為本地時(shí)間的方法
今天小編就為大家分享一篇python 獲取utc時(shí)間轉(zhuǎn)化為本地時(shí)間的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
python用線性回歸預(yù)測(cè)股票價(jià)格的實(shí)現(xiàn)代碼
這篇文章主要介紹了python用線性回歸預(yù)測(cè)股票價(jià)格的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python編程中的for循環(huán)語句學(xué)習(xí)教程
這篇文章主要介紹了Python編程中的for循環(huán)語句學(xué)習(xí)教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10

