Python實現自動錄製虎牙直播

2021-09-11 05:03:48 字數 4034 閱讀 6112

之前比較喜歡看虎牙的直播,但是由於時間比較忙沒辦法看,最近學完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=

defprepare

(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(

.format

('"%s"'

% flv_url, os.path.join(file_path,filename)))

defrun

(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)

defrecording

(self)

:global flag,anchor_status

# 進行錄屏的執行緒

while

true

:print

("-------recoding-------"

)print

(len

(anchor_status)==0

)print

(flag)

time.sleep(5)

iflen

(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 =

""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:

歡迎提出建議!

我的郵箱是[email protected]

1.2.

python實現自動登入

最近大資料感興趣實踐了一下自動登入,返回結果是登入成功import urllib import urllib2 import gzip import stringio 構建post請求的字典 postvalues postdata urllib.urlencode postvalues 構建get請...

Python實現自動寫郵件

上星期接到任務要完成乙個自動寫郵件的指令碼,基本功能是每兩小時執行一次程式跑出統計 並將統計 的summary傳送到領導的郵箱。由於公司是做數字貨幣的,每兩小時實時監測策略交易情況較為必要。下面來實現自動寫郵件的功能部分 import smtplib from email.mime.text imp...

Python實現自動關機

首先,我們了解下dos下關機的命令詳情 shutdown s f t 300 c 還有300s關機 shutdown i l s r a f m computername t xx c mment d up xx yy i 顯示 gui 介面,必須是第乙個選項 l 登出 不能與選項 m 一起使用 s...