「python」抖音短视频下载助手

前不久抖音宣布日活跃用户达到1.5亿,说实话,当看到这个数据我吓了一跳.1.5亿,什么个概念?基本上年轻人人手一个抖音账号.

最近,我在 github 上看到一个项目,专门用来批量下载抖音短视频.有兴趣的可以在 github 上搜索 Jack-Cherish ,上面有不少爬虫的小项目.

接下来把源码分享给大家:

# -*- coding:utf-8 -*-

from splinter.driver.webdriver.chrome import Options, Chrome

from splinter.browser import Browser

from contextlib import closing

import requests, json, time, re, os, sys, time

from bs4 import BeautifulSoup

class DouYin(object):

def __init__(self, width = 500, height = 300):

"""

抖音App视频下载

"""

# 无头浏览器

chrome_options = Options()

chrome_options.add_argument('user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"')

self.driver = Browser(driver_name='chrome', executable_path='D:/chromedriver', options=chrome_options, headless=True)

def get_video_urls(self, user_id):

"""

获得视频播放地址

Parameters:

user_id:查询的用户ID

Returns:

video_names: 视频名字列表

video_urls: 视频链接列表

nickname: 用户昵称

"""

video_names = []

video_urls = []

unique_id = ''

while unique_id != user_id:

search_url = 'https://api.amemv.com/aweme/v1/discover/search/?cursor=0&keyword=%s&count=10&type=1&retry_type=no_retry&iid=17900846586&device_id=34692364855&ac=wifi&channel=xiaomi&aid=1128&app_name=aweme&version_code=162&version_name=1.6.2&device_platform=android&ssmix=a&device_type=MI+5&device_brand=Xiaomi&os_api=24&os_version=7.0&uuid=861945034132187&openudid=dc451556fc0eeadb&manifest_version_code=162&resolution=1080*1920&dpi=480&update_version_code=1622' % user_id

req = requests.get(url = search_url, verify = False)

html = json.loads(req.text)

aweme_count = html['user_list'][0]['user_info']['aweme_count']

uid = html['user_list'][0]['user_info']['uid']

nickname = html['user_list'][0]['user_info']['nickname']

unique_id = html['user_list'][0]['user_info']['unique_id']

user_url = 'https://www.douyin.com/aweme/v1/aweme/post/?user_id=%s&max_cursor=0&count=%s' % (uid, aweme_count)

req = requests.get(url = user_url, verify = False)

html = json.loads(req.text)

i = 1

for each in html['aweme_list']:

share_desc = each['share_info']['share_desc']

if '抖音-原创音乐短视频社区' == share_desc:

video_names.append(str(i) + '.mp4')

i += 1

else:

video_names.append(share_desc + '.mp4')

video_urls.append(each['share_info']['share_url'])

return video_names, video_urls, nickname

def get_download_url(self, video_url):

"""

获得带水印的视频播放地址

Parameters:

video_url:带水印的视频播放地址

Returns:

download_url: 带水印的视频下载地址

"""

req = requests.get(url = video_url, verify = False)

bf = BeautifulSoup(req.text, 'lxml')

script = bf.find_all('script')[-1]

video_url_js = re.findall('var data = \[(.+)\];', str(script))[0]

video_html = json.loads(video_url_js)

download_url = video_html['video']['play_addr']['url_list'][0]

return download_url

def video_downloader(self, video_url, video_name, watermark_flag=True):

"""

视频下载

Parameters:

video_url: 带水印的视频地址

video_name: 视频名

watermark_flag: 是否下载不带水印的视频

Returns:

"""

size = 0

if watermark_flag == True:

video_url = self.remove_watermark(video_url)

else:

video_url = self.get_download_url(video_url)

with closing(requests.get(video_url, stream=True, verify = False)) as response:

chunk_size = 1024

content_size = int(response.headers['content-length'])

if response.status_code == 200:

sys.stdout.write(' [文件大小]:%0.2f MB\n' % (content_size / chunk_size / 1024))

with open(video_name, "wb") as file:

for data in response.iter_content(chunk_size = chunk_size):

file.write(data)

size += len(data)

file.flush()

sys.stdout.write(' [下载进度]:%.2f%%' % float(size / content_size * 100) + '\r')

sys.stdout.flush()

def remove_watermark(self, video_url):

"""

获得无水印的视频播放地址

Parameters:

video_url: 带水印的视频地址

Returns:

无水印的视频下载地址

"""

self.driver.visit('http://douyin.iiilab.com/')

self.driver.find_by_tag('input').fill(video_url)

self.driver.find_by_xpath('//button[@class="btn btn-default"]').click()

html = self.driver.find_by_xpath('//div[@class="thumbnail"]/div/p')[0].html

bf = BeautifulSoup(html, 'lxml')

return bf.find('a').get('href')

def run(self):

"""

运行函数

Parameters:

None

Returns:

None

"""

self.hello()

user_id = input('请输入ID(例如40103580):')

video_names, video_urls, nickname = self.get_video_urls(user_id)

if nickname not in os.listdir():

os.mkdir(nickname)

print('视频下载中:共有%d个作品!\n' % len(video_urls))

for num in range(len(video_urls)):

print(' 解析第%d个视频链接 [%s] 中,请稍后!\n' % (num+1, video_urls[num]))

if '\\' in video_names[num]:

video_name = video_names[num].replace('\\', '')

elif '/' in video_names[num]:

video_name = video_names[num].replace('/', '')

else:

video_name = video_names[num]

self.video_downloader(video_urls[num], os.path.join(nickname, video_name))

print('\n')

print('下载完成!')

def hello(self):

"""

打印欢迎界面

Parameters:

None

Returns:

None

"""

print('*' * 100)

print('\t\t\t\t抖音App视频下载小助手')

print('\t\t作者:Jack Cui')

print('*' * 100)

if __name__ == '__main__':

douyin = DouYin()

douyin.run()

想要 python 和其他语言学习资料的私信我,想要怎么科学上网的也可以私信我,记得回复 python,不然无法给你回信.

要使用Python下载抖音链接的视频文件,可以按照以下步骤进行操作: 1. 首先,导入需要的库,并创建一个文件夹用于保存视频文件。使用`import pandas as pd`导入pandas库,使用`import requests`导入requests库,使用`import os`导入os库。 2. 读取包含抖音链接的CSV文件。使用`pd.read_csv()`函数读取CSV文件,并将链接保存在一个名为`df`的DataFrame中。 3. 对链接进行去重和筛选。创建一个空列表`dom`用于保存去重后的链接。使用循环遍历DataFrame中的链接,并判断链接是否已存在于`dom`列表中,如果不存在,则将其添加到`dom`列表中。 4. 开始下载视频。使用另一个循环遍历`dom`列表中的链接,并使用`requests.get()`函数发送GET请求获取视频文件的内容。将请求返回的内容保存为视频文件,并写入到刚刚创建的文件夹中。 下面是一个示例代码,演示了如何使用Python下载抖音链接的视频文件: ``` import pandas as pd import requests import os num = 0 dom = [] folder_path = "F:/video/" os.makedirs(folder_path) df = pd.read_csv('douyin.csv', header=None, names=["url"]) # 对链接去重及去除刚进入抖音获取的视频链接 for i in df['url'][2:]: if i not in dom: dom.append(i) # 下载视频 for j in dom: url = j num += 1 response = requests.get(url, stream=True) filename = str(num) + '.mp4' with open('F:\\video\\' + filename, 'ab') as f: f.write(response.content) f.flush() print(filename + '下载完成') ``` 这段代码将根据给定的CSV文件中的链接,下载对应的视频文件并保存在指定的文件夹中。请确保已安装所需的库,并将CSV文件的路径和保存视频的文件夹路径正确地指定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [用Python全自动下载抖音视频!](https://blog.csdn.net/cainiao_python/article/details/92802623)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Python抖音视频去水印,并打包成exe可执行文件](https://blog.csdn.net/weixin_53795646/article/details/127121527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值