Python如何实现录制虎牙直播

需求

之前比较喜欢看虎牙的直播,但是由于时间比较忙没办法看,最近学完Python的基础课程后考虑能否用Python来实现自动录像,这样想什么时候看就能什么时候看,比较方便。

准备工作

仅从使用角度来看,需要安装:

Python(开玩笑怎么能没有这个)

Python所需的模块(requests、json、re)

录屏软件(ffmpeg)

如果想要理解代码进行修改的话建议学一些Python爬虫入门即可

博主使用的是Ubuntu系统,想要在Windows下运行的话只需要修改命令行执行语句,并且把ffmpeg.exe这个可执行文件放在当前目录即可

程序执行效果:输入直播间地址,通过多线程可以实现判断直播间当前是否正在直播,如果直播开始即开始录屏,直播结束录屏结束。(有一个目前尚未解决的bug,如果直播间在进行重播,当前这个判断会出问题,留待之后修改)

代码分析

下面就是令人激动的代码了

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import json

import random

import requests

import re

import os

import threading

import time

import datetime

import random

class HuyaLive():

def __init__(self,url):

# 必须的访问地址和访问头

self.url = url

self.headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}

def prepare(self):

# 获得页面html字符串

response = requests.get(self.url,headers=self.headers)

html = response.content.decode()

# 加载json

json_script = re.search('"stream": ({.+?})\s*};', html).group(1)

print(json_script)

data = json.loads(json_script)

# 获取视频流

room_info = data['data'][0]['gameLiveInfo']

stream_info = random.choice(data['data'][0]['gameStreamInfoList'])

sFlvUrl = stream_info['sFlvUrl']

sStreamName = stream_info['sStreamName']

sFlvUrlSuffix = stream_info['sFlvUrlSuffix']

sFlvAntiCode = stream_info['sFlvAntiCode']

flv_url = '{}/{}.{}?{}'.format(sFlvUrl, sStreamName, sFlvUrlSuffix, sFlvAntiCode)

# 打印视频流地址

print("current url = ",flv_url)

# 利用ffmpeg进行录屏

filename = datetime.datetime.today()

filename = filename.strftime('%Y-%m-%d%H:%M:%S')

filename = filename + '.flv'

print(filename) # 文件名称类似'%Y-%m-%d%H:%M:%S.flv'格式

# 文件保存的目录,我把文件存在硬盘上面了

file_path = "/media/ych/Seagate\ Backup\ Plus\ Drive/zhibo"

os.system('ffmpeg -user-agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" -i {} -c copy {}'.format('"%s"' % flv_url, os.path.join(file_path,filename)))

def run(self):

# 判断是否开播

global anchor_status # 是否开播的标记

response = requests.get(self.url, headers=self.headers)

html = response.content.decode()

anchor_status = re.findall("上次开播(.*?)" , html)

# 开播返回None,不开播返回列表

if anchor_status:

print("尚未开播")

else:

print("正在直播")

def change_status(self):

# 判断是否开播的线程

print("------change------")

while True:

try:

self.run()

# 随机对直播间进行访问,为防止爬虫被封

time.sleep(random.randint(10,30))

except:

# 如果ip被封或报错,休息60s后继续访问

time.sleep(60)

def recording(self):

global flag,anchor_status

# 进行录屏的线程

while True:

print("-------recoding-------")

print(len(anchor_status) == 0)

print(flag)

time.sleep(5)

if len(anchor_status) == 0 and flag:

print("---get into self prepare")

# 进行录屏

self.prepare()

flag = False

elif len(anchor_status) != 0:

flag = True

anchor_status = ["1"]

flag = True

if __name__ == '__main__':

temp_url = "http://www.huya.com/{}"

room_name = input("请输入直播间房间号,例如“920710”:")

request_url = temp_url.format(room_name)

site = HuyaLive(request_url)

change = threading.Thread(target=site.change_status)

ffm = threading.Thread(target=site.recording)

# 开始运行程序

change.start()

ffm.start()

代码地址

github:https://github.com/YCH188/huyalive

欢迎提出建议!

我的邮箱是yangchenghao159@gmail.com

参考文献

1.https://github.com/CharlesPikachu/Video-Downloader/blob/master/not_in_downloader/liveCache/douyuTV.py

2.https://github.com/zhangn1985/ykdl

python自动进直播_Python实现自动录制虎牙直播相关推荐

  1. python自动备份手机_python实现自动备份windows应用数据

    开发这个功能主要是刚开始要备份几台windows服务器的用户数据,后来写到最后就变成了一个数据备份通用工具了,程序可以根据配置文件的配置进行目录数据的备份,只要指定备份的目录,程序会自动调用系统win ...

  2. 如何在python中表示微分_Python实现自动微分(Automatic Differentiation)

    什么是自动微分 自动微分(Automatic Differentiation)是什么?微分是函数在某一处的导数值,自动微分就是使用计算机程序自动求解函数在某一处的导数值.自动微分可用于计算神经网络反向 ...

  3. python海龟图画龙珠_Python selenium+webdriver 实战龙珠直播

    selenium是一个自动化的web应用测试工具,直接可以运行在浏览器中模拟用户进行操作,有点类似于机器人,可以模拟用户进行点击,登陆,输入等操作. webdriver可以看成是驱动器,用来驱动我们的 ...

  4. python自动操作脚本_Python实现自动挂机脚本 | 沐雨浥尘

    使用Python + win32api实现简单自动鼠标点击 使用tkinter设计GUI界面并用pyinstaller打包 不知不觉肝阴阳师也快一年了,对这游戏真是又爱又恨,最近刚刚发布了PC版,突然 ...

  5. python如何做脚本_Python实现自动挂机脚本(基础篇)

    不知不觉肝阴阳师也快一年了,对这游戏真是又爱又恨,最近刚刚发布了PC版,突然很想尝试着写个脚本挂机,话不多说进入正题. 简单的鼠标操作 游戏挂机脚本,无非就是自动移动鼠标,自动点击,进行重复操作,所以 ...

  6. python 用题库自动答题器_python实现自动刷题

    使用Python实现云豆网自动刷题 这些是一大佬写的我就解读一下 所有代码全是Py3 要有一些Python基础emmm不用太多 不懂就问我的QQ:2025450852 大体思路: 控制浏览器模拟点击 ...

  7. python操作手机京东_Python实现自动上京东抢手机

    本文实例为大家分享了Python自动上京东抢手机的具体代码,供大家参考,具体内容如下 上次抢荣耀V9,被京东给恶心到了,所以就写了个简单的Python来自动抢V9.虽然用的是比较蠢的方法,但觉得还是有 ...

  8. python用os模块自动打开软件_Python实现自动打开电脑应用的示例代码

    由于时间原因,有时候可能会错过某个上网课的时间段.因此想要实现自动定时启动DingDing. 新手一枚,如有不当勿喷望大佬指正. 自动打开DingDing可以由两种方法实现: 通过找出找出软件在电脑中 ...

  9. python自动登录教程_Python 实现自动登录+点击+滑动验证功能

    需要用到的库有selenium,还需要安装Chrome浏览器驱动,具体如何安装我就不详述了 在这里我模拟了csdn的登录过程 ** 1**.首先打开网页,用户名+密码登录,然后定位用户名输入框,和密码 ...

  10. python 股票自动交易从零开始_Python股票自动交易从零开始

    课程目录 1.Python股票自动交易从零开始~第一集~简介(Av24528809,P1).mp4 2.Python股票自动交易从零开始~第二集~安装工具包(Av24528809,P2).mp4 3. ...

最新文章

  1. 使用脚本规范化企业office程序注册名
  2. 学成在线--20.新增课程(最后完善)
  3. 计量科学大数据分级分类
  4. 智慧社区防控(测温)
  5. 【Java】java测试--词频统计 ----IO流操作
  6. 【Vue】npm run serve 和 npm run dev 有什么区别
  7. 算法导论 思考题6-3(Young氏矩阵)
  8. MATLAB 绕轴旋转图像函数 rotate 详解
  9. 格雷码(Gray Code)编码、实现及规律(附编码)
  10. Pytorch实现ResNet50网络结构,包含ResNet18,ResNet34,ResNet50,ResNet101,ResNet152
  11. STM32-TM1640-点数码管计数
  12. 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析
  13. (转)高德百度坐标系转换方法
  14. 青海干部网络学院 自动学习网站
  15. Bing必应搜索引擎打开新标签默认页的修改
  16. 三毛的创作姿态与文体选择
  17. 本地网络出现了一个意外的情况,不能完成所有你在设置中所要求的更改
  18. 计算机视觉基础知识点(根据cs231n以及博客内容整理)
  19. lhgdialog的弹出框操作
  20. k8s——通过暴漏端口实现外部访问服务

热门文章

  1. Ubuntu16.04系统美化
  2. 确定性随机数发生器测试向量——DRBG-HMAC-SHA1
  3. party_bid_core总结
  4. 怎么用一个计算机控制两个屏幕,一台电脑控制多个led显示屏
  5. 单片机中的数据存储器ram
  6. 51单片机数据存储器扩展实验(汇编)
  7. WIN2000故障修复之故障恢复控制台篇
  8. java处理网络数据流
  9. vant 动态 粘性布局_使用 position:sticky 实现粘性布局
  10. 写一函数fac(n) 求n!。在主函数中输入a,b,c三个整数,实现求a!+b!+c!的值并输出。