推广 热搜: 可以  搜索引擎  企业  page  个数  百度  使用  音视频  选择  父亲 

使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

   日期:2024-12-21     移动:http://ww.kub2b.com/mobile/quote/8098.html

 抖音很火,楼主使用python随机爬取抖音视频,并且无水印下载,人家都说天下没有爬不到的数据,so,楼主决定试试水,纯属技术爱好,分享给大家。。

v1-dy.ixigua.com,v3-dy.ixigua.com,v6-dy.ixigua.com,v9-dy.ixigua.com

        //保存到本地添加开始

        //这是抖音的地址||"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")||

使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

            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:" + " " + oSession.oRequest.headers);

            //file.writeLine("Request-body:" + oSession.GetRequestBodyAsString());

            //file.writeLine(" ");

            file.close();

        }       

        //保存到本地添加结束

到appium客户端中即可,就能在appium客户端中操作抖音app。

{

"platformName": "Android",

"deviceName": "Redmi Note5",

"appPackage": "com.ss.android.ugc.aweme",

"appActivity": ".main.MainActivity"

}

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 Serverself.server ='http://localhost:4723/wd/hub'# 新建一个Sessionself.driver = webdriver.Remote(self.server, self.desired_caps)

        # 设置滑动初始坐标和滑动距离self.start_x = 500        self.start_y = 1500        self.distance = 1300def 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类型forain f_data_list:

            datalist_blank.append(a.strip())#去掉 strip去掉头尾默认空格或换行符# print(datalist)data_dict={}

    for   data   in datalist_blank:

        #print(type(data),data,' ')

        #print(data.split('/'),' ',data.split('/').index('m'),' ')

        #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

        elifint(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=[]

    forx,yin data_dict.items():

        data_new.append(y)

    return data_newdef responsedouyin():

    data_url=distinct_data()

    # 使用request获取视频url的内容# stream=True作用是推迟下载响应体直到访问Response.content属性# 将视频写入文件夹num = 1forurlin 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)#设置流的起始值为0temp_size = 0

        ifres.status_code == 200:

            with open(pathinfo, 'wb') as file:

                #file.write(res.content)

                #print(pathinfo + '下载完成啦啦啦啦啦')

                num += 1

                #当流下载时,下面是优先推荐的获取内容方式,iter_content()函数就是得到文件的内容,指定chunk_size=1024,大小可以自己设置哟,设置的意思就是下载一点流写一点流到磁盘中

                f or  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(" [%s%s] %d % %"% ('█'* done,''* (50 - done), 100 * temp_size / total_size)+" 下载信息:"+pathinfo +"下载完成啦啦啦啦啦")

                        sys.stdout.flush()#刷新缓存#############下载进度条部分end###############print(' ')#每一条打印在屏幕上换行输出

if  __name__  ==  '__main__':

    responsedouyin()

本文地址:http://ww.kub2b.com/quote/8098.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号