from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p/9635097.html
抖音很火,楼主使用python随机爬取抖音视频,并且无水印下载,人家都说天下没有爬不到的数据,so,楼主决定试试水,纯属技术爱好,分享给大家。。
1.楼主首先使用Fiddler4来抓取手机抖音app这个包,具体配置的操作,网上有很多教程供大家参考。


上面得出抖音的视频的url,这些url均能在网页中打开,楼主数了数,这些url的前缀有些不同,一共有这4种类型:
v1-dy.ixigua.com
v3-dy.ixigua.com
v6-dy.ixigua.com
v9-dy.ixigua.com
楼主查看这四种类型得知,v6-dy.ixigua.com 这个前缀后面的参数其中有一个是Expires(中文含义过期的意思)
Expires=1536737310,这个是时间戳,标记的是过期的时间如下图所示,过了15:28分30秒,则表示url不能使用,楼主算了一下,url有效期是一个小时。

看到这些url,楼主不能手动一个一个粘贴,so楼主需要在+Fiddler4中(在Fiddler4使用script代码网上有大量详细教程)使用如下代码,自动保存到一个txt文档中。

//保存到本地添加开始
//这是抖音的地址||"v1-dy.ixigua.com"||"v3-dy.ixigua.com"||"v6-dy.ixigua.com"||"v9-dy.ixigua.com"||
if (oSession.fullUrl.Contains("v1-dy.ixigua.com")||
oSession.fullUrl.Contains("v3-dy.ixigua.com")||
oSession.fullUrl.Contains("v6-dy.ixigua.com")||
oSession.fullUrl.Contains("v9-dy.ixigua.com")){
var fso;
var file;
fso = new ActiveXObject("Scripting.FileSystemObject");
//文件保存路径,可自定义
file = fso.OpenTextFile("H:\\Request.txt",8 ,true);
//file.writeLine("Request-url:" + oSession.url);
file.writeLine("http://"+oSession.url)
//file.writeLine("Request-host:" + oSession.host);
//file.writeLine("Request-header:" + "\n" + oSession.oRequest.headers);
//file.writeLine("Request-body:" + oSession.GetRequestBodyAsString());
//file.writeLine("\n");
file.close();
}
//保存到本地添加结束

把上边的代码插入到如下图所示的地方即可。

2.上面的url是楼主手动点击一个个刷新抖音app出现的,so楼主使用appium来自动刷新抖音app,自动获得url,自动保存到txt文档中。
首先需要在appium中得到抖音这个app包的一些用的信息,如下图所示

楼主使用的是红米手机,至于appium怎么安装配置,大家可参考网上相关教程,appium客户端连接上手机(需要数据线连接)后,在控制台打印出log日志文件,在日志文件中找到这四个参数即可,然后保存
到appium客户端中即可,就能在appium客户端中操作抖音app。
{
"platformName": "Android",
"deviceName": "Redmi Note5",
"appPackage": "com.ss.android.ugc.aweme",
"appActivity": ".main.MainActivity"
}
appPackage这一项com.ss.android.ugc.aweme 则表示抖音短视频。


楼主使用如下代码来实现无限刷新抖音app,前提是需要手机连着数据线连在电脑上并且开启appium客户端的服务和打开Fiddler4抓包(配置好环境手机)。

from appium import webdriver
from time import sleep ##以下代码可以操控手机app
class Action():
def __init__(self):
# 初始化配置,设置Desired Capabilities参数
self.desired_caps = {
"platformName": "Android",
"deviceName": "Mi_Note_3",
"appPackage": "com.ss.android.ugc.aweme",
"appActivity": ".main.MainActivity"
}
# 指定Appium Server
self.server = 'http://localhost:4723/wd/hub'
# 新建一个Session
self.driver = webdriver.Remote(self.server, self.desired_caps)
# 设置滑动初始坐标和滑动距离
self.start_x = 500
self.start_y = 1500
self.distance = 1300 def comments(self):
sleep(3)
# app开启之后点击一次屏幕,确保页面的展示
self.driver.tap([(500, 1200)], 500)
def scroll(self):
# 无限滑动
while True:
# 模拟滑动
self.driver.swipe(self.start_x, self.start_y, self.start_x,
self.start_y - self.distance)
# 设置延时等待
sleep(5)
def main(self):
self.comments()
self.scroll() if __name__ == '__main__':
action = Action()
action.main()

楼主运行次代码就能在Fiddler4中得到无限量的url。
3.楼主拿到url后,会发现有些url会重复,so楼主加入了去重的功能,为了好看楼主也加入了进度条花里花哨的功能,运行代码最终会下载下来。

# _*_ coding: utf-8 _*_
import requests
import sys
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36" } ##去重方法
def distinct_data():
##读取txt中文档的url列表
datalist_blank=[]
pathtxt='H:/Request.txt'
with open(pathtxt) as f:
f_data_list=f.readlines()#d得到的是一个list类型
for a in f_data_list:
datalist_blank.append(a.strip())#去掉\n strip去掉头尾默认空格或换行符
# print(datalist)
data_dict={}
for data in datalist_blank:
#print(type(data),data,'\n')
#print(data.split('/'),'\n',data.split('/').index('m'),'\n')
#url中以/为切分,在以m为切分 ##把m后面的值放进字典key的位置,利用字典特性去重
if int(data.split('/').index('m'))==4 :#此处为v6开头的url
#print(data,44,data.split('/')[5])
data_key1=data.split("/")[5]
data_dict[data_key1]=data
elif int(data.split('/').index('m'))==6: #此处为v1或者v3或者v9开头的url
#print(data,66,data.split('/')[7],type(data.split('/')[7]))
data_key2=data.split("/")[7]
data_dict[data_key2] =data
#print(len(data_dict),data_dict)
data_new=[]
for x,y in data_dict.items():
data_new.append(y)
return data_new def responsedouyin():
data_url=distinct_data()
# 使用request获取视频url的内容
# stream=True作用是推迟下载响应体直到访问Response.content属性
# 将视频写入文件夹
num = 1
for url in data_url:
res = requests.get(url,stream=True,headers=headers)
#res = requests.get(url=url, stream=True, headers=headers)
#定义视频存放的路径
pathinfo = 'H:/douyin-video/%d.mp4' % num #%d 用于整数输出 %s用于字符串输出
# 实现下载进度条显示,这一步需要得到总视频大小
total_size = int(res.headers['Content-Length'])
#print('这是视频的总大小:',total_size)
#设置流的起始值为0
temp_size = 0
if res.status_code == 200:
with open(pathinfo, 'wb') as file:
#file.write(res.content)
#print(pathinfo + '下载完成啦啦啦啦啦')
num += 1
#当流下载时,下面是优先推荐的获取内容方式,iter_content()函数就是得到文件的内容,指定chunk_size=1024,大小可以自己设置哟,设置的意思就是下载一点流写一点流到磁盘中
for chunk in res.iter_content(chunk_size=1024):
if chunk:
temp_size += len(chunk)
file.write(chunk)
file.flush() #刷新缓存
#############下载进度条部分start###############
done = int(50 * temp_size / total_size)
#print('百分比:',done)
sys.stdout.write("\r[%s%s] %d % %" % ('█' * done, ' ' * (50 - done), 100 * temp_size / total_size)+" 下载信息:"+pathinfo + "下载完成啦啦啦啦啦")
sys.stdout.flush()#刷新缓存
#############下载进度条部分end###############
print('\n')#每一条打印在屏幕上换行输出 if __name__ == '__main__':
responsedouyin()

运行代码,效果图如下

视频最终保存到文件夹中

github地址:https://github.com/Stevenguaishushu/douyin
from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)的更多相关文章
- 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
抖音很火,楼主使用python随机爬取抖音视频,并且无水印下载,人家都说天下没有爬不到的数据,so,楼主决定试试水,纯属技术爱好,分享给大家.. 1.楼主首先使用Fiddler4来抓取手机抖音app这 ...
- 教你用python爬取抖音app视频
记录一下如何用python爬取app数据,本文以爬取抖音视频app为例. 编程工具:pycharm app抓包工具:mitmproxy app自动化工具:appium 运行环境:windows10 思 ...
- python爬取抖音APP视频教程
本文讲述爬取抖音APP视频数据(本文未完,后面还有很多地方优化总结) 公众号回复:抖音 即可获取源码 1.APP抓包教程,需要用到fiddler fiddler配置和使用查看>>王者荣耀盒 ...
- Python爬虫---爬取抖音短视频
目录 前言 抖音爬虫制作 选定网页 分析网页 提取id构造网址 拼接数据包链接 获取视频地址 下载视频 全部代码 实现结果 待解决的问题 前言 最近一直想要写一个抖音爬虫来批量下载抖音的短视频,但是经 ...
- Python爬虫一爬取B站小视频源码
如果要爬取多页的话 在最下方循环中 填写好循环的次数就可以了 项目源码 from fake_useragent import UserAgent import requests import time ...
- Python爬虫:爬取美拍小姐姐视频
最近在写一个应用,需要收集微博上一些热门的视频,像这些小视频一般都来自秒拍,微拍,美拍和新浪视频,而且没有下载的选项,所以只能动脑想想办法了. 第一步 分析网页源码. 例如:http://video. ...
- Python爬虫-抖音小视频-mitmproxy与Appium
目的: 爬取抖音小视频 工具: mitmproxy.Appium 思路: 1. 通过 mitmproxy 截取请求, 找出 response 为 video 的请求. 2. 通过 mitmdu ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- Python 爬虫——抖音App视频抓包
APP抓包 前面我们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取.现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视 ...
随机推荐
- 【PHP】PHP 7.4 新特性
PHP 7.4 预计在 2019 年年末就会正式发布了,本文先来看看一下 PHP 7.4 的新特性. 1.预加载 预加载的实现理论上是可以为 PHP 带来很大的性能提升的.比如说:现在传统的 PHP ...
- (原)caffe中的conv
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10486686.html conv总体调用流程如下图所示: 说明:带o的为输出,如Wo代表输出宽度:带 ...
- ABC卡
如今在银行,P2P等各种贷款业务机构,普遍使用信用评分,对客户实行打分制,以期对客户有一个优质与否的评判.但是不是所有人都知道信用评分卡还分A,B,C卡三类!所以,如果你只知道ABC是Gary的ABC ...
- [转]rsync命令中文文档
原文链接 rsync是一个快速.多功能的远程(和本地)文件拷贝工具. 摘要 Local: rsync [OPTION...] SRC... [DEST] Access via remote shell ...
- 单片机成长之路(51基础篇) - 021 STC89C51系列单片机 内部EEPROM 驱动
最近又看了一下关于stc单片机的知识,感觉在使用中EEPROM是个经常用到的东西,特地学习了一下,给大家分享一下心得,如有不足,多多包涵,废话不多说,一图解千言,先上图: /*------------ ...
- SNF快速开发平台2019-APP移动端实际应用效果
废话不多说,直接上效果图: 这是我们移动端框架基本程序+组件库+标准业务程序,当然了还需要配合上我们的代码生成器则更如虎添翼.https://www.cnblogs.com/spring_wang/p ...
- thymeleaf th:href 多个参数传递格式
今天在使用thymeleaf的th:href传递多个参数的时候困惑了.然后百度了一下,发现没有人注释说明怎么弄,然后自己google了一下,现在就标记一下,方便记录一下. th:href=" ...
- [MySQL Status] Queries,Questions,read/s区别,Com_Commit和handle_commit
Queries: 这个状态变量表示,mysql系统接收的查询的次数,包括存储过程内部的查询 Questions: 这个状态变量表示,mysql系统接收查询的次数,但是不包括存储过程内部的查询 ...
- ffmpeg中av_log的实现分析
[时间:2017-10] [状态:Open] [关键词:ffmpeg,avutil,av_log, 日志输出] 0 引言 FFmpeg的libavutil中的日志输出的接口整体比较少,但是功能还是不错 ...
- golang:常量
今天写代码的时候才发现,go语言里面的常量不能是数组(例如:[2]byte) 于是想查一下资料搞清楚到底是什么原因导致的,从effective go查到如下介绍: 但是这里也仅仅就是介绍了一下常量类型 ...