日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python网站开发实例视频_Python实战-让在职教育类网站的视频全自动播放

發布時間:2025/3/20 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python网站开发实例视频_Python实战-让在职教育类网站的视频全自动播放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀本文需要 5.8 分鐘。文章同步發于微信公眾號 somenzz,歡迎訂閱,使用Python打造效率工具。

時間是公平的,因為每個人的一分鐘都是 60 秒;時間又是最不公平的,有人一年的收獲頂得上別人十年,這取決于如何利用時間。

成年人的世界,一個字忙,忙得沒有時間學習,沒有時間健身,沒有時間陪家人。其實解決忙這個問題很簡單,那就是做減法,減去不必要的應酬、會議,減去不重要的事項,只保留那些重要的,有意義的,所謂永遠只做那些重要不緊急的事情。另外節省時間的方法就是借助工具,提高效率。

這些年流行網絡課程學習,在職人士尤其如此,有些課程,需要你花錢去用心學;有些課程,別人花了錢你也得學,什么學習積分,學習報表,積累學時等等,還與績效、職稱掛勾。后者大概率不許快進,這樣就要花費時間點擊播放,再點擊再播放,直到看完完成任務。

如果你知道 Python,其實應對一些不得不看的在線課程,非常簡單,可以寫代碼讓它全部自動播放,最近就有個朋友讓我幫助開發一個可以自動播放網課的工具,來緩解大量線上學習的壓力,感覺這一過程應該有不少人需要,特些記錄下來,可以幫助有同樣需求的朋友。

如果對技術無感,想直接使用現成的工具,請穩步:https://t.zsxq.com/7yzF23R 如果手擼代碼,請繼續。

網站風格如下:

第一步:登陸。

登陸前,先打開開發者工具(Chrome瀏覽器的快捷鍵是F12),然后登陸,查看接口返回數據:

點擊這個login的接口,查看詳細信息如下:

這點重點記錄四個信息:

1、請求的接口地址,即圖中的 Request URL 及請求的方法。 2、Cookie 中的信息,這里是 JSESSIONID。 3、傳遞的參數和返回的接口數據。

根據這些信息,使用 requests 庫自帶的 session 功能很容易寫出登陸的代碼,并且可以獲取此處的 JSESSIONID,可以大致推測出后續的請求也是使用該 JSESSIONID。

import requests

session = requests.Session()

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '

'(KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36',

'X-Requested-With': 'XMLHttpRequest',

}

def login():

params = {

'account': your_username,

'password': your_password,

}

r = session.post("http://jxjy.jxt.zj.gov.cn/iext/zg/webfront/user/loginByAccount.do", params=params,headers = headers)

jsessionid = session.cookies.get('JSESSIONID')

return jsessionid

第二步:獲取信息。

登陸后, 獲取到了 JSESSIONID。接下來,我們看到登陸后,還有一個接口,返回的是視頻課程的列表,此接口使用的 JSESSIONID 和登陸是一致的,可以推斷出 JSESSIONID 是后續接口請求的憑證,不過這個憑證是記錄在 cookie 中的,requests 的 session 功能可以自帶 cookie 請求,因此不需要單獨處理。這里就是著重要分析的地方:

我們可以從這里獲取課程的名稱,持續時間,學習進度,編號等信息,有了這些信息,就可以為后續接口的請求提供參數了。方法有很多,正則表達式,BeautifulSoup,Selenium 喜歡哪個就用哪個吧,我這里使用 BeautifulSoup。參考代碼如下:

def get_play_list_info():

video_list = []

for i in range(4):

params = {

'pageNum': i + 1,

'url': '/zgProject/front/learncenter/list'

}

r = session.get("http://jxjy.jxt.zj.gov.cn/iext/zg/webfront/DatumFrontController/infolist.do", params, headers )

soup = BeautifulSoup(r, "html.parser")

for el in soup.findAll("div", {'onclick': re.compile("skip(.*)")}):

video_name = el.find("div", {'class': 'clearfix'}).get('title')

function_name = el.get('onclick')

video_id = function_name.split(",")[0].split('(')[1].strip()

progress = el.find("span", {'class': 'baif'}).get_text()

durationTime = el.find("span", {'class': 'durationTime'}).get_text()

if progress != '已完成':

video_list.append({'video_name': video_name, 'video_id': video_id, 'progress': progress,

'durationTime': int(durationTime)})

logger.info(f"共 {len(video_list)} 個待播放的課程,將依次播放:")

for video in video_list:

logger.info(f"{video['video_name']},總時長:{video['durationTime']}秒")

return video_list

第三步:分析視頻播放進度保存邏輯。

以上步驟,可以獲取所有未完成的課程列表,包括名稱、ID,持續時長,當前進度等信息。接下來,我們點擊一個視頻播放,然后看看接口處有什么信息:

這里我們發現請求的參數中有兩個,一個是 time,值是 110,一個是 zgcid,可以猜測,time 是秒數,zgcid 是對應的是視頻課程的編號。過一會時間,發現又發送了請求:

此時 time 為 226,發現間隔了約 120 秒鐘,繼續觀察:

接口名稱叫 saveplayrecord,很容易猜測到,每隔 120 秒發送向服務器一次這樣的請求,就代表向服務匯報,我當前已經觀看到了這個位置,當 time 為視頻的總持續時長時,視頻播放的狀態會顯示為已完成。

def play_video(video):

logger.info(f"{video['video_name']} 開始播放..." )

params = {

'url': '/zgProject/front/learncenter/videocast2',

'zgcid': video['video_id']

}

session.get("http://jxjy.jxt.zj.gov.cn/iext/zg/webfront/DatumFrontController/detail.do", params, headers)

percent = float(video['progress'].replace("已觀看","").replace("%","").strip())

cnt = int(video['durationTime']*percent/100)

logger.info(f"當前進度:{percent:0.2f}%")

while cnt < video['durationTime']:

time.sleep(120)

cnt += 120

if cnt > video['durationTime']:

cnt = video['durationTime']

params = {'time':cnt, 'zgcid':video['video_id'] }

r = session.post("http://jxjy.jxt.zj.gov.cn/iext/zg/webfront/DatumFrontController/saveplayrecord.do", params,headers)

if r.json()['success'] == 1:

logger.info(f"播放進度為: {cnt*100/video['durationTime']:0.2f}%")

logger.info(f"{video['video_name']} 播放完成。" )

到這里,我們發現播放視頻的過程中,每隔兩分鐘,網站會向服務器發送一次請求,保存當前視頻的播放進度。此時已經豁然開朗。接下來就是組裝代碼的事情了。

用代碼小結

login()

videos = get_play_list_info()

for video in videos:

play_video(video)

print("視頻播放完畢")

爬蟲的本質在于獲取信息,獲取信息的前提是知道信息發送和接收的方式,因此如果本文看不太懂的朋友,建義先花費 1 - 2 個小時看下 HTTP 協議,再學習下非常適合人類使用的 Python 第三方庫 requests,之后再看此文,就十分簡單。

(完)

總結

以上是生活随笔為你收集整理的python网站开发实例视频_Python实战-让在职教育类网站的视频全自动播放的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。