前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系作者以作处理。
作者:小马说代码
思路
主要逻辑为首先确定需要下载的dy视频url,接着通过浏览器的开发者模式找到该视频的原生视频链接,最后通过python实现原生链接的批量自动下载。
准备
1.通过pip install package下载这几个包:re、requests、selenium、pandas
2.安装谷歌浏览器驱动器,下载地址:http://npm.taobao.org/mirrors/chromedriver/,根据自己谷歌浏览器的版本下载与之对应的驱动,这点非常重要,不然无法运行。
实现
1.首先我们确定需要下载的dy视频url:
2.将所有需要下载的视频url填入表格里并保存,这里填入三个url作为例子:
3.在谷歌浏览器中任意输入某个dy视频的链接,右键检查打开开发者模式,按照图中的步骤一次进行点击,最终找到原生视频的url,通过下载该链接的内容即可下载dy视频:
4.如果下载的视频量比较少的话,该手动的方法还是比较方便的,但是视频量很大的话,我们需要考虑如何通过Python实现批量自动下载视频。
5.实现自动批量下载的方法主要是通过selenium和正则表达式自动获取视频的url:
# 获取原生视频链接
def get_url(html):
ex_url = '<video class="" autoplay="" playsinline="true".*? src="(.*?)"'
url = re.findall(ex_url, html, re.S)
return url[0]
6.拿到url最后进行批量下载:
# 下载视频
def get_mp4(url, i):
video_content = requests.get(url='https:' + url, headers=headers).content
with open(f'“视频保存地址”/{i}.mp4', mode='wb') as f:
f.write(video_content)
print(f'视频{i}保存完成: ')
完整代码
这里需要填入自己的cookie和user-agent以及dy链接文件的地址:
#!/usr/bin/env python
# coding:utf8
import random
import re
import requests
from time import sleep
from selenium import webdriver
#用来实现规避检测
from selenium.webdriver import ChromeOptions
import pandas as pd
headers = {
"Cookie":"填入cookie",
"user-agent": "填入user-agent"
}
# 获取抖音url list
def douyin_url():
df = pd.read_excel('抖音链接文件地址/douyin_url.xlsx', sheet_name='Sheet1')
df = df['url']
df_li = df.values.tolist()
return df_li
# 获取页面
def get_page(url):
#实现无可视化界面操作
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('——headless')
chrome_options.add_argument('——disable—gpu')
# 如何实现让selenium规避被检测到的风险
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
bro = webdriver.Chrome(executable_path='./chromedriver.exe', options=chrome_options)
# 五可视化界面(无头浏览器) phantomJs
bro.get(url)
return bro.page_source
# 获取原生视频链接
def get_url(html):
ex_url = '<video class="" autoplay="" playsinline="true".*? src="(.*?)"'
url = re.findall(ex_url, html, re.S)
return url[0]
# 下载视频
def get_mp4(url, i):
video_content = requests.get(url='https:' + url, headers=headers).content
with open(f'“视频保存地址”/{i}.mp4', mode='wb') as f:
f.write(video_content)
print(f'视频{i}保存完成: ')
def main():
li_list = douyin_url()
i = 0
for li in li_list:
i += 1
html = get_page(li)
mp4_url = get_url(html)
get_mp4(mp4_url, i)
sleep(random.randint(3, 6))
if __name__ == '__main__':
main()
最终我们便可以拿到所有需要下载的dy的视频。
总结
通过对dy视频的批量下载,需要掌握selenium、正则表达和requsets的用法,需要注意的是当我们循环下载时,一定要设置延迟时间,避免出现滑动条的风险。