网页视频抓取脚本( 如何在电脑前一边编程一边轻松地看抖音?)
优采云 发布时间: 2021-12-27 00:23网页视频抓取脚本(
如何在电脑前一边编程一边轻松地看抖音?)
基于Python的抖音视频全自动下载
更新时间:2020-11-06 11:34:48 作者:舒子华
本文主要介绍基于Python的抖音视频全自动下载的实现。通过示例代码,文章中的介绍非常详细。对大家的学习或工作有一定的参考学习价值。有需要的朋友可以参考
很多人都喜欢玩抖音,我也喜欢看抖音*敏*感*词*姐,但是拿着手机一个一个的找视频太难了。作为程序员,如何在电脑前边编程边轻松观看抖音*敏*感*词*姐?
使用Python,简单三步就可以自动下载喜欢的抖音姐妹们的视频。
查尔斯
Charles是一款App抓包工具,功能与Fildler类似。可用于获取App运行过程中发生的所有网络请求和响应。
在电脑上下载安装Charles后,需要配置证书,最后启用SSL监控。
手机端需要和电脑在同一个网络,比如都连接到家里的Wi-Fi,然后在手机的Wi-Fi高级选项中使用Charles代理,输入手机的IP地址计算机,端口 8888,最后命名证书。
连接完成后,手机打开抖音App,通过操作App的动作,即可获取视频的请求信息。
通过多次实验发现,链接的背面是不断变化的,只有链接的正面总是相同的,即“”“”“”没有变化。
所以在编写脚本时,可以将此信息作为链接的开头。
中间件代理
使用 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进行筛选,只选取视频的url
for 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参数:
点击蓝色按钮,手机将自动启动抖音应用程序。然后操作手机,然后点击Appium的刷新按钮,获取元素位置码。
通过这种实践,发现Appium有时无法很好的获取元素的定位。对于找不到的元素,我直接点击手机屏幕的位置。
由于每个人的手机屏幕大小不一样,这个参数肯定会发生变化,所以有弊端,不能通用。
左右滑动切换图片
一般操作如上图所示。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 + '下载完成')
终于成功获取了*敏*感*词*姐们的所有视频:
打算把视频里所有喜欢的妹子都剪辑起来,拍个《最美瞬间》系列的视频分享给大家!
源地址:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本屋。