电话:400-123-4567
安信11资讯 当前位置: 首页 > 安信11资讯

用Python全自动下载抖音视频!_1

时间:2024-09-09 13:10:29

 

都说夏天是恋爱的季节,每天穿梭在人来人往的地铁上,插肩而过很多漂亮的小姐姐。苦逼的码农只能低头刷抖音,抖音上有很多漂亮的小姐姐街拍视频。既然是玩Python,为啥不用Python来全自动下载这些视频呢,今天我们就用Python来实现自动化下载街拍视频。


/ 01 / Charles


用Charles来找视频的API接口,具体操作看历史的当当网那个实战案例,不细说。


640


这里通过滑动抖音App,可以获取到视频的请求信息。


通过多次实验,发现链接的后面是会不停的改变,只有链接的前头始终不变,即「http://v1-dy」「http://v6-dy」「http://v9-dy」不变。


所以在写脚本的时候,可以以这些信息做为链接开头。



/ 02 / mitmproxy


利用mitmproxy中的mitmdump组件,对接Python脚本,用Python实现监听后的处理。


640


这里我只是利用脚本获取链接,并没有直接利用脚本下载视频。


因为我是在mitmdump.exe文件所在的文件夹运行脚本,脚本里导入不了requests模块。


不想搞那些烦人的环境变量,所以只获取链接。


然后再去下载视频,视频链接需要去重,可能会有重复的。


Python脚本如下。


 
 



/ 03 / Appium


配置抖音的Appium参数。


640


点击蓝色按钮,手机自动启动抖音App!


接下来操作手机,然后点击Appium的刷新键,获取元素定位代码。


通过本次的实践发现Appium有时并不能很好的获取元素的定位,这可能就跟Web端的iframe页面一样。


所以针对找不到的元素,我直接对手机屏幕位置进行点击。


由于大家手机屏幕大小不同,这个参数肯定是会变化的,所以存在弊端,无法通用。


{? 左右滑动切换图片? }

640 640 640


大致操作如上图。UP主的主页图漏了,请自行脑补,Python代码如下。


 
 

import?time
import?random
from?appium?import?webdriver
from?selenium.webdriver.common.by?import?By
from?selenium.webdriver.support.ui?import?WebDriverWait
from?appium.webdriver.common.touch_action?import?TouchAction
from?selenium.webdriver.support?import?expected_conditions?as?EC


def?main():
#?设置驱动配置
server?=?'http://localhost:4723/wd/hub'
desired_caps?=?{
'platformName':?'Android',
'deviceName':?'STF_AL00',
'appPackage':?'com.ss.android.ugc.aweme',
'appActivity':?'.main.MainActivity',
#?关闭手机软键盘
'unicodeKeyboard':?True,
'resetKeyboard':?True
}
driver?=?webdriver.Remote(server,?desired_caps)
wait?=?WebDriverWait(driver,?60)
#?同意用户隐私协议,点击
button_1?=?wait.until(EC.presence_of_element_located((By.ID,?'com.ss.android.ugc.aweme:id/q6')))
button_1.click()
#?禁止电话权限,点击
button_2?=?wait.until(EC.presence_of_element_located((By.ID,?'com.android.packageinstaller:id/permission_deny_button')))
button_2.click()
#?禁止位置权限,点击
button_3?=?wait.until(EC.presence_of_element_located((By.ID,?'com.android.packageinstaller:id/permission_deny_button')))
button_3.click()
time.sleep(2)
#?向上滑动,进入抖音视频播放页面
TouchAction(driver).press(x=515,?y=1200).move_to(x=515,?y=1000).release().perform()
#?这里需要设置一个较长时间的延迟,因为抖音有引导操作和提示,需等待片刻
time.sleep(20)
#?点击抖音"喜欢"处,以此进入登录界面
TouchAction(driver).press(x=950,?y=800).release().perform()
#?点击密码登录
button_4?=?wait.until(EC.presence_of_element_located((By.ID,?'com.ss.android.ugc.aweme:id/afg')))
button_4.click()
#?输入账号
button_5?=?wait.until(EC.presence_of_element_located((By.ID,?'com.ss.android.ugc.aweme:id/ab_')))
button_5.send_keys('你的账号')
#?输入密码
button_6?=?wait.until(EC.presence_of_element_located((By.ID,?'com.ss.android.ugc.aweme:id/aes')))
button_6.send_keys('你的密码')
time.sleep(2)
#?因为会跳出软键盘,会遮挡登录按钮,需点击软键盘取消
TouchAction(driver).press(x=980,?y=1850).release().perform()
time.sleep(2)
#?点击登录按钮
button_7?=?wait.until(EC.presence_of_element_located((By.ID,?'com.ss.android.ugc.aweme:id/abb')))
button_7.click()
time.sleep(2)
#?登录成功,进入抖音视频界面,点击下方标题栏?"我"
TouchAction(driver).press(x=990,?y=1850).release().perform()
#?进入个人主页,点击关注处
button_8?=?wait.until(EC.presence_of_element_located((By.ID,?'com.ss.android.ugc.aweme:id/a_7')))
button_8.click()
#?进入关注栏,点击第二个关注
button_9?=?wait.until(EC.presence_of_element_located((By.XPATH,?'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.LinearLayout/android.support.v7.widget.RecyclerView/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]')))
button_9.click()
#?进入UP主主页,点击第一个视频
button_10?=?wait.until(EC.presence_of_element_located((By.ID,?'com.ss.android.ugc.aweme:id/aqm')))
button_10.click()
#?不断下滑页面,直到底部
while?True:
TouchAction(driver).press(x=515,?y=1247).move_to(x=515,?y=1026).release().perform()
time.sleep(float(random.randint(5,?10)))


if?__name__?==?'__main__':
main()


下载视频代码,需要对视频链接去重。


 
 

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?+?'下载完成')


最后成功获取小姐姐们的全部视频...


640


要是曾经在厂子里的我,那时会这骚操作该多好,哈哈。


其实我想的更多,多数妹子都挺喜欢拍抖音,不过她们应该不会下载这种操作滴。


那么小老弟们的机会就来了,下载下来喜欢的妹子的抖音视频。


然后剪辑出一个「最美瞬间」系列的视频,机会不就来了嘛...


近期热门:

用Python来解读神奇宝贝

花5分钟,菜鸟也能学个设计模式|单例模式

漫画,用Python做了一个女神颜值打分系统


需要源码,点击阅读原文

返回
地址:广东省广州市天河区88号 电话:400-123-4567
版权所有:Copyright © 2012-2018 首页-安信11娱乐-注册登录站 ICP备案编号:琼ICP备xxxxxxxx号

平台注册入口