python爬取某音小姐姐短视频,今天带你全自动下载!

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云 作者:python学习教程

( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
在这里插入图片描述

这篇文章主要介绍了基于Python实现全自动下载抖音视频,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

很多人喜欢玩抖音,我也喜欢看抖音小姐姐,可拿着手机一个个找视频太费劲。作为一个程序员,如何能在电脑前一边编程一边轻松地看抖音小姐姐呢?

下面利用Python,简单的三个步骤就可以将你喜欢的抖音小姐姐的视频自动下载下来了。

Charles

Charles是一个App抓包工具,与Filddler的功能相似,利用它可以得到App运行过程中发生的所有网络请求和响应内容。

在电脑端下载安装完Charles后,需要配置证书,最后开启SSL监听。

手机端则是需要与电脑在同一网络下,比如都连接家里的Wi-Fi,然后在手机的Wi-Fi高级选项里使用Charles代理,输入电脑的IP地址,端口8888,最后为证书命名。

连好以后,手机打开抖音App,随着操作App的动作,可以获取到视频的请求信息。
在这里插入图片描述
通过多次实验,发现链接的后面是会不停的改变,只有链接的前头始终不变,即「http://v1-dy」「http://v6-dy」「http://v9-dy」不变。

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

MitmProxy
在这里插入图片描述
利用MitmProxy中的mitmdump组件,对接Python脚本,用Python实现监听后的处理。

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

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

不想配置环境变量了,所以只获取链接。

利用链接再去下载视频,视频链接需要去重,因为可能会有重复的。

Python脚本如下:

def response(flow):urls = ['http://v1-dy', 'http://v3-dy', 'http://v6-dy', 'http://v9-dy']# 对url进行筛选,只选取视频的urlfor url in urls:if url in flow.request.url:print('\n\n抖音视频\n\n')with open('douyin.csv', 'a+', encoding='utf-8-sig') as f:f.write(flow.request.url + '\n')

配置抖音的Appium参数:
在这里插入图片描述
点击蓝色按钮,手机自动启动抖音App。接着操作手机,然后点击Appium的刷新键,获取元素定位代码。

通过本次的实践发现Appium有时并不能很好的获取元素的定位,针对找不到的元素,我直接对手机屏幕位置进行点击。

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

左右滑动切换图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大致操作如上图。UP主的主页图漏了,请自行脑补,Python代码如下:

import timeimport randomfrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.webdriver.common.touch_action import TouchActionfrom 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 pdimport requestsimport os num = 0dom = []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 = jnum += 1response = 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 + '下载完成')

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

在这里插入图片描述
以上就是本文的全部内容,希望对大家的学习有所帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值