当前位置: 移动技术网 > IT编程>脚本编程>Python > python爬虫抖某音爬取视频 Airtest+fiddler

python爬虫抖某音爬取视频 Airtest+fiddler

2019年07月03日  | 移动技术网IT编程  | 我要评论

n8论坛,有姝,中国邮政挂号信查询

所用到的模块和库 :  python3+reqeuests+airtest+fiddler

airtest  : (app自动化软,类似appium,网易家的本人很喜欢)

 

1.首先环境的配置 fiddler 和airtest

  fiddler可以设定抓取包的链接,并自动保存到设定的txt文件中

  #在配置好手机证书,以及可以抓到手机包的情况下,再看下面步骤----配置fiddler环境:

                               手机抓包证书教程:

  弄好之后,打开抖音,可以看到一堆抖音的包的话,就说明可以了,

      

 

  接着来下面操作,设置抓包规则并自动保存       由于截图不好截,就手机拍了= =图片不好勿打

  

  打开后按ctrl+f 搜素    onbeforerequest  找到这个方法

   

 

   将下面代码插入fiddler onbeforerequest  方法中

//保存到本地添加开始
        
		//这是抖音的地址  设定视频包的链接名
		if (
			osession.fullurl.contains("v1-dy.bytecdn.cn")||
			osession.fullurl.contains("v3-dy-y.bytecdn.cn")||
			osession.fullurl.contains("v3-dy.z.bytecdn.cn")||
			osession.fullurl.contains("v5-dy.bytecdn.cn")||
			osession.fullurl.contains("v6-dy.bytecdn.cn") ||
			osession.fullurl.contains("v9-dy-z.bytecdn.cn") ||
		    osession.fullurl.contains("v9-dy.bytecdn.cn")
		){
            
			var fso;
			var file;
			fso = new activexobject("scripting.filesystemobject");
			//文件保存路径,可自定义  自动保存的txt文档地址
			file = fso.opentextfile("e:\\url_bt\\douyin.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();
		}        
		//保存到本地添加结束

  将上面的代码插入后打开抖音刷一刷,然后去自动保存的地址查询是否有相应的txt文档,如果没有,查看fiddler对应视频包名是否有修改

  效果---这些链接可以在浏览器打开,但是可能看不到视频,那是浏览器不支持,这个无影响,  

  !!!这些地址是有有效期的。。目测是大概1-2小时吧 

  

   那么问题来了。。如何自动模拟人的滑动来获取到这些链接----华丽丽的airtest登场(没有接触过手机自动化软件的可以先去入门了,入门后再回来查看,有appium的童鞋可以接着看)

  airetest 基本操作教程:

  airtest是支持python代码操作的, 需要对应的库  :pocoui        pip install pocoui

  安装好之后,写入自动滑动抖音的视频来截取链接-----当然可以截取  推荐,同城,搜索,榜单的一些视频包,只需要打开相应的视频界面滑动

  以下是我写的自动上滑,拉动视频的代码--如果不适用,建议在airtest上自己写好copy到python代码中就欧克

  

__author__ = "xiaojun"

from airtest.core.api import *

auto_setup(__file__)

from poco.drivers.android.uiautomation import androiduiautomationpoco


poco = androiduiautomationpoco(use_airtest_input=true, screenshot_each_action=false)
#模拟滑动
def douyin_spwipe():
    #无限循环向上滑动
    while true:
        #坐标,以及速度
        poco.swipe([0.5,0.8],[0.5,0.3],duration=0.2)
        sleep(3)

    那么有了视频的链接。。。剩下的就是写一个python代码获取这些链接并请求写入mp4视频文件中了

    !!!注意视频链接是有  有效期的 大概1-2小时吧,所以建议是,一边滑动获取链接,一边写入生成链接

     下面是python获取链接,和写入mp4的代码。。。如有不合适,请自行修改调试代码

     获取和生成两个方法可以 同时进行, 多线程,多个文件,多个进程随意   生成视频后清空txt文件,休眠十几分钟让滑动程序,继续截图视频包链接

import os
import requests
import sys

import time
from fake_useragent import useragent

headers = {
    'user-agent':useragent().chrome
}
#去重
def distinct_data():
    datalist_blank = []
    with open(r'e:\url_bt\douyin.txt','r') as f:
        #读取所有行,生成列表
        f_data_list = f.readlines()
        print(f_data_list)
        for url in f_data_list:
            if len(url)>40:
                datalist_blank.append(url.strip()) #去掉\n strip去掉头尾默认空格或换行符
                # print(url.strip())


        f.close()
    # print(len(datalist_blank), datalist_blank)
    # print(len(set(datalist_blank)), set(datalist_blank))
    #去重后的列表url
    datalist_blank= list(set(datalist_blank))

    return datalist_blank

#写入文件夹
def responsedouyin():
    #获得种子链接
    data_url=distinct_data()

    #统计文件夹中视频数量
    dir = r'e:\url_bt\douyin_mp4'  # 要统计的文件夹
    num = len([name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))])+1
    print(num)#文件夹现文件数量
    for url in data_url:
        # stream=true作用是推迟下载响应体直到访问response.content属性
        # res = requests.get(url,stream=true,headers=headers)
        res = requests.get(url=url, stream=true, headers=headers)
#         #定义视频存放的路径
        pathinfo = r'e:\url_bt\douyin_mp4\%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

    with open(r'e:\url_bt\douyin.txt', 'w') as f:
        f.write('')
        f.close()
    time.sleep(700)

  

  如果有优化,以及更好的方案可以随时联系我,   以上均为原创所写,转载请标明出处!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网