日韩性视频-久久久蜜桃-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实战-让在职教育类网站的视频全自动播放的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲精品激情视频 | 97夜夜操| 热久久中文 | 反差在线观看免费版全集完整版 | 免费大片av | 激情噜噜 | 日韩精品999| 久久精品国产亚洲AV熟女 | 91中文在线 | 天堂在线www | 日韩最新av | 欧美极品喷水 | av电影在线不卡 | 91在线播放国产 | 亚洲精品白浆 | av在线伊人 | 免费黄色资源 | 午夜888| 日韩中文字幕不卡 | 9久9久9久女女女九九九一九 | 夏目彩春娇喘呻吟高潮迭起 | 亚洲第一黄色网 | 日韩在线视频观看 | 少妇喷潮明星 | 久久一区二区电影 | 中国一级特黄毛片大片 | 中文字幕二| 亚洲国产成人精品久久 | 国产ts系列 | 小视频国产 | 日韩av看片| 午夜啪啪网站 | 欧美一级片黄色 | 2018中文字幕在线观看 | 国产一级片免费播放 | 在线免费一级片 | 中文字幕免费一区 | 亚洲久热 | 中国毛片视频 | 亚洲综合日韩精品欧美综合区 | 久久无码人妻精品一区二区三区 | 手机在线观看日韩av | 看日本毛片| 夜夜夜夜夜操 | 国产精品国产三级国产三级人妇 | 国产又粗又猛又爽又黄的视频一 | 亚洲精品成av人片天堂无码 | bangbros性欧美18 | 国产精品一区二区小说 | 狠狠久久久 | 久久久青草 | 中文字幕在线观看高清 | 亚洲国产三区 | 青青青草视频在线 | 欧美亚洲视频一区 | 久久精品影视 | 欧美女人交配视频 | 国产精品美女久久久 | 欧美日韩一区二区电影 | 真实乱视频国产免费观看 | 亚洲男人天堂2019 | 久草免费在线视频观看 | 日韩人妻无码一区二区三区99 | 精品国产伦一区二区三区 | 九七影院在线观看免费观看电视 | 国产视频1区2区 | www插插插无码免费视频网站 | 狠狠五月婷婷 | 久久视频国产 | 人妻精品久久久久中文 | 天堂a√在线 | 激情狠狠 | 91在线欧美| 亚洲插插插| 亚洲精品一线 | 最新成人| 青青草超碰在线 | 国产一级免费大片 | 四虎av在线播放 | 无码 人妻 在线 视频 | 成人a视频 | 国产免费看av| 男女污污网站 | 成人mv在线观看 | 91精品视频在线 | 最好看的中文字幕国语电影mv | 天天操夜夜操夜夜操 | 精品久久久久久久无码 | 黄色二级毛片 | 成人先锋av| 亚洲国产www | √资源天堂中文在线视频 | 久久av一区二区三区亚洲 | 日韩激情影院 | 国产精品视频免费观看 | 欧美亚洲三级 | 四色永久访问 | 波多野结衣黄色网址 | 亚洲麻豆一区二区三区 |