基於tkinter+python36製作得視訊播放器,非會員也可播放
首先附上2個播放地址,可以解析視訊網站,我只是個視訊搬運工,暫時未新增下載功能。
www.wq114.org/weixin.php?url=
http://www.wmxz.wang/video.php?url=
兩個網站都可快速解析出視訊播放地址
上圖
tkinter模組程式碼如下
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
from tkinter.ttk import Button,Entry,Radiobutton,Scrollbar from tkinter import END,Label,Tk,StringVar,Listbox,messagebox,SINGLE,PhotoImage from 愛奇藝_project.movie_get import Pro from PIL import Image,ImageTk import io import re import requests # from urllib.request import urlopen class Movie_app: def __init__(self): self.win=Tk() self.win.geometry('600x420') self.win.title("愛奇藝-優酷-PPTV視訊播放下載器V3.1") self.creat_res() self.creat_radiores() self.config() self.page=1 self.p=Pro() self.win.mainloop() def creat_res(self): self.temp=StringVar()#url地址 self.temp2=StringVar() self.t1=StringVar()#通道 self.t3=StringVar()#愛奇藝,優酷,PPTV self.La_title=Label(self.win,text="地址:") self.La_way=Label(self.win,text="選擇視訊通道:") self.R_way1=Radiobutton(self.win,text="通道A",variable=self.t1,value=True) self.R_way2=Radiobutton(self.win,text="通道B",variable=self.t1,value=False) self.R_aiqiyi=Radiobutton(self.win,text="愛奇藝",variable=self.t3,value="a") self.R_youku=Radiobutton(self.win,text="優酷",variable=self.t3,value="y") self.R_pptv=Radiobutton(self.win,text="PPTV",variable=self.t3,value="p") self.B_play=Button(self.win,text="播放▶") self.B_uppage=Button(self.win,text="上頁") self.B_nextpage=Button(self.win,text="下頁") self.B_search=Button(self.win,text="♣搜尋全站♠") self.La_mesasge=Label(self.win,text="☜ ⇠☸⇢ ☞",bg="pink") self.La_page=Label(self.win,bg="#BFEFFF") self.S_croll=Scrollbar(self.win) self.L_box=Listbox(self.win,bg="#BFEFFF",selectmode=SINGLE) self.E_address=Entry(self.win,textvariable=self.temp) self.La_title.place(x=10,y=50,width=50,height=30) self.E_address.place(x=70,y=50,width=200,height=30) self.B_play.place(x=300,y=50,width=50,height=30) self.R_way1.place(x=160,y=10,width=70,height=30) self.R_way2.place(x=240,y=10,width=70,height=30) self.La_way.place(x=10,y=10,width=100,height=30) self.R_aiqiyi.place(x=20,y=100,width=70,height=30) self.R_youku.place(x=90,y=100,width=70,height=30) self.R_pptv.place(x=160,y=100,width=70,height=30) self.B_search.place(x=252,y=140,width=100,height=30) self.La_mesasge.place(x=80,y=125,width=90,height=20) self.L_box.place(x=10,y=180,width=252,height=230) self.S_croll.place(x=260,y=180,width=20,height=230) self.B_uppage.place(x=10,y=140,width=50,height=30) self.B_nextpage.place(x=180,y=140,width=50,height=30) self.La_page.place(x=80,y=150,width=90,height=28) def creat_radiores(self): self.movie=StringVar()#電影 self.S_croll2=Scrollbar()#分集 self.La_pic=Label(self.win,bg="#E6E6FA") self.La_movie_message=Listbox(self.win,bg="#7EC0EE") self.R_movie=Radiobutton(self.win,text="電影",variable=self.movie,value="m") self.tv=Radiobutton(self.win,text="電視劇",variable=self.movie,value="t") self.zhongyi=Radiobutton(self.win,text="綜藝",variable=self.movie,value="z") self.dongman=Radiobutton(self.win,text="動漫",variable=self.movie,value="d") self.jilupian=Radiobutton(self.win,text="紀錄片",variable=self.movie,value="j") self.B_view=Button(self.win,text="✤檢視✤") self.B_info=Button(self.win,text="使用說明") self.B_clearbox=Button(self.win,text="清空列表") self.B_add=Button(self.win,text="新增到播放列表") self.R_movie.place(x=290,y=180,width=80,height=30) self.B_view.place(x=290,y=330,width=70,height=30) self.B_add.place(x=370,y=255,width=100,height=30) self.B_clearbox.place(x=500,y=255,width=70,height=30) self.tv.place(x=290,y=210,width=80,height=30) self.zhongyi.place(x=290,y=240,width=80,height=30) self.dongman.place(x=290,y=270,width=80,height=30) self.jilupian.place(x=290,y=300,width=80,height=30) self.La_movie_message.place(x=370,y=290,width=200,height=120) self.La_pic.place(x=370,y=10,width=200,height=240) self.B_info.place(x=290,y=370,width=70,height=30) self.S_croll2.place(x=568,y=290,width=20,height=120) def show_info(self): msg=""" 1.輸入視訊播放地址,即可播放 選擇A或者B可切換視訊源 2.選擇視訊網,選擇電視劇或者電影, 搜尋全網後選擇想要看得影片,點 檢視,在右方list裡選擇分集視訊 新增到播放列表裡點選播放 """ messagebox.showinfo(title="使用說明",message=msg) def config(self): self.t1.set(True) self.B_play.config(command=self.play_url_movie) self.B_search.config(command=self.search_full_movie) self.B_info.config(command=self.show_info) self.S_croll.config(command=self.L_box.yview) self.L_box['yscrollcommand']=self.S_croll.set self.S_croll2.config(command=self.La_movie_message.yview) self.La_movie_message['yscrollcommand']=self.S_croll2.set self.B_view.config(command=self.view_movies) self.B_add.config(command=self.add_play_list) self.B_clearbox.config(command=self.clear_lisbox2) self.B_uppage.config(command=self.uppage_) self.B_nextpage.config(command=self.nextpage_) def uppage_(self): print('---------上一頁---------') self.page-=1 print(self.page) if self.page<1: self.page=1 def nextpage_(self): print('----------下一頁--------') self.page+=1 print(self.page) if self.t3=="a" or self.t3=="y": if self.page>30: self.page=30 elif self.t3=="p": if self.movie=="m": if self.page>165: self.page=165 elif self.movie == "t": if self.page > 85: self.page = 85 elif self.movie == "z": if self.page > 38: self.page = 38 elif self.movie == "d": if self.page > 146: self.page = 146 elif self.movie == "j": if self.page > 40: self.page = 40 def clear_lisbox(self): self.L_box.delete(0,END) def clear_lisbox2(self): self.La_movie_message.delete(0,END) def search_full_movie(self): print("-----search----") self.La_page.config(text="當前頁:{}".format(self.page)) self.clear_lisbox() try: movie_url, movie_title, movie_src_pic=self.p.get_movie_res(self.t3.get(),self.movie.get(),self.page) self.movie_dic={} for i,j,k in zip(movie_title,movie_url,movie_src_pic): self.movie_dic[i]=[j,k] for title in movie_title: self.L_box.insert(END,title) print(self.movie_dic) return self.movie_dic except: messagebox.showerror(title='警告',message='請選擇電影或者電視劇') def add_play_list(self): print('---------playlist----------') print(self.movie_dic) if self.La_movie_message.get(self.La_movie_message.curselection())=="": messagebox.showwarning(title="警告",message='請在列表選擇影片') else: print("電影名字:",self.La_movie_message.get(self.La_movie_message.curselection())) if self.movie.get()!="m": self.temp.set(self.new_more_dic[self.La_movie_message.get(self.La_movie_message.curselection())]) else: self.temp.set(self.movie_dic[self.La_movie_message.get(self.La_movie_message.curselection())][0]) def view_pic(self,pic_url): print('--------viewpic---------') pa_url_check=r'//.+[.]jpg' if re.match(pa_url_check,pic_url): print("ok") pic_url="http:"+pic_url print(pic_url) data=requests.get(pic_url).content # data=urlopen(pic_url).read() io_data=io.BytesIO(data) self.img=Image.open(io_data) self.u=ImageTk.PhotoImage(self.img) self.La_pic.config(image=self.u) def view_movies(self): print("--------viewmovie----------") cur_index=self.L_box.curselection() print(self.L_box.get(cur_index)) if self.movie.get()!="m":#非電影類 self.new_more_dic=self.p.get_more_tv_urls(self.movie_dic[self.L_box.get(cur_index)][0],self.t3.get(),self.movie.get()) print(self.new_more_dic) for i,fenji_url in self.new_more_dic.items(): self.La_movie_message.insert(END, i) else:#電影類 self.La_movie_message.insert(END,self.L_box.get(cur_index)) self.view_pic(self.movie_dic[self.L_box.get(self.L_box.curselection())][1])#載入圖片 def play_url_movie(self): print("--------ok-----------") # print(type(self.t1.get()),self.t1.get()) if self.temp.get()=="": messagebox.showwarning(title="警告",message="請先輸入視訊地址") else: if self.t1.get()!="": self.p.play_movie(self.temp.get(),self.t1.get()) else: messagebox.showwarning(title='警告',message='請選擇通道') m=Movie_app() 視訊獲取程式碼如下
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
""" VIP視訊解析:http://www.vipjiexi.com/ 無名小站:http://www.wmxz.wang/ http://www.iqiyi.com/lib/dianying/%E5%96%9C%E5%89%A7,%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86,2018_11_1.html """ import requests import re import os from lxml import etree from selenium import webdriver class Pro: header_ai={'Referer': 'http://www.iqiyi.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.17 Safari/537.36' } header_you={'Referer': 'http://list.youku.com/category/video','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'} header_pp = {'Referer': 'http://list.pptv.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'} way=False def __init__(self): pass def search_movies_type(self,u_name,u_type,page):#兩個引數 根據狀態輸出規則 dic1 = {'m': 1, 't': 2, 'z': 6, 'd': 4, 'j': 3} dic2 = {'m': 96, 't': 97, 'z': 85, 'd': 100, 'j': 84} dic3 = {'m': 1, 't': 2, 'z': 4, 'd': 3, 'j': 210548} headers={} #愛奇藝 a/電影m:1 t:2 z:6 d:4 j:3 優酷y / m:96 t:97 z:85 d:100 j:84 pptv p/m:1 t:2 z:4 d:3 j:210548 url, pa_movie_title, pa_movie_url, pa_move_pic='','','','' url_aiqiyi='http://list.iqiyi.com/www/{}/-------------24-{}-1-iqiyi--.html'.format(dic1[u_type],page) url_youku='https://list.youku.com/category/show/c_{}_s_1_d_1_p_{}.html'.format(dic2[u_type],page) # url_pptv='http://list.pptv.com/category/type_{}.html'.format(dic3[u_type]) url_pptv='http://list.pptv.com/channel_list.html?page={}&type={}'.format(page,dic3[u_type]) pa_ai_movie_title = '//div[@class="site-piclist_pic"]/a[@class="site-piclist_pic_link"]/@title' pa_ai_movie_url = '//div[@class="site-piclist_pic"]/a[@class="site-piclist_pic_link"]/@href' pa_ai_movie_pic = '//div[@class="site-piclist_pic"]/a[@class="site-piclist_pic_link"]/img/@src' pa_you_movie_title='//div[@class="p-thumb"]/a/@title' pa_you_movie_url='//div[@class="p-thumb"]/a/@href' pa_you_movie_pic='//div[@class="p-thumb"]/img[@class="quic"]/@src' pa_pp_movie_title='//li/a[@class="ui-list-ct"]/@title' pa_pp_movie_url='//li/a[@class="ui-list-ct"]/@href' pa_pp_movie_pic='//li/a[@class="ui-list-ct"]/p[@class="ui-pic"]/img/@data-src2' if u_name=="a":#如果是愛奇藝 url=url_aiqiyi pa_movie_title=pa_ai_movie_title pa_movie_url=pa_ai_movie_url pa_move_pic=pa_ai_movie_pic headers=self.header_ai elif u_name=="y":#如果是優酷 url=url_youku pa_movie_title=pa_you_movie_title pa_movie_url=pa_you_movie_url pa_move_pic=pa_you_movie_pic headers=self.header_you elif u_name=="p":#如果是PPTV url=url_pptv pa_movie_title=pa_pp_movie_title pa_movie_url=pa_pp_movie_url pa_move_pic=pa_pp_movie_pic headers=self.header_pp return url,pa_movie_title,pa_movie_url,pa_move_pic,headers def get_movie_res(self,u_name,u_type,page):#輸出電影名 連結 圖片 url, pa_movie_title, pa_movie_url, pa_move_pic,headers=self.search_movies_type(u_name,u_type,page) res=requests.get(url=url,headers=headers).content.decode('utf-8') # print(res) html=etree.HTML(res) movie_url=html.xpath(pa_movie_url) movie_title=html.xpath(pa_movie_title) movie_src_pic=html.xpath(pa_move_pic) print(len(movie_title),movie_title) print(len(movie_url),movie_url) print(len(movie_src_pic),movie_src_pic) return movie_url,movie_title,movie_src_pic def change_urlink(self,lis): for i in range(len(lis)): if '\\' in lis[i]: lis[i] = lis[i].replace('\\', '') # print(lis) return lis def change_youku_link(self,urls): pa_link='//.+[.]html' if re.match(pa_link,urls): urls='http:'+urls return urls def get_more_tv_urls(self,url,u_name,u_type):#獲取電視劇分集連結 tv_dic_new = {} if u_name == 'y': url=self.change_youku_link(url) res = requests.get(url, headers=self.header_you).text.encode(encoding='utf-8').decode('utf-8') html = etree.HTML(res) print(res) if u_type=="m" or u_type=="t": self.tv_more_title = html.xpath('//div[@class="item item-num"]/@title') self.tv_more_url = html.xpath('//div[@class="item item-num"]/a[@class="sn"]/@href') elif u_type=="d": self.tv_more_title = html.xpath('//div[@class="item item-txt"]/@title') self.tv_more_url = html.xpath('//div[@class="item item-txt"]/a[@class="sn"]/@href') elif u_type=="z": self.tv_more_title = html.xpath('//div[@class="item item-cover"]/@title') self.tv_more_url = html.xpath('//div[@class="item item-cover"]/a/@href') elif u_type == "j": self.tv_more_title = html.xpath('//div[@class="item item-cover current"]/@title') self.tv_more_url = html.xpath('//div[@class="item item-cover current"]/a/@href') elif u_name == 'a': res = requests.get(url, headers=self.header_ai).text.encode(encoding='utf-8').decode('utf-8') html = etree.HTML(res) print(res) if u_type=="m" or u_type=="t" or u_type=='d': self.tv_more_title = html.xpath( '//ul/li[@data-albumlist-elem="playItem"]/div[@class="site-piclist_pic"]/a[1]/@title') self.tv_more_url = html.xpath( '//ul/li[@data-albumlist-elem="playItem"]/div[@class="site-piclist_pic"]/a[1]/@href') elif u_type=="z" or u_type=="j": self.tv_more_title = html.xpath('//div[@class="recoAlbumTit"]/a[1]/@title') self.tv_more_url = html.xpath('//div[@class="recoAlbumTit"]/a[1]/@href') elif u_name == 'p': res = requests.get(url, headers=self.header_pp).text.encode(encoding='utf-8').decode('utf-8') # html = etree.HTML(res) self.tv_more_url2 = re.compile('{"url":"(.+?)"').findall(res) self.tv_more_url = self.change_urlink(self.tv_more_url2) self.tv_more_title = ["第{}集".format(x) for x in range(1, len(self.tv_more_url) + 1)] for i, j in zip(self.tv_more_title, self.tv_more_url): tv_dic_new[i] = j print(len(self.tv_more_title), self.tv_more_title) print(len(self.tv_more_url), self.tv_more_url) print(tv_dic_new) return tv_dic_new def url_change(self,url,flag): pa_url='http://www.iqiyi.com/a_[.+].html' if flag=="0":#通道1 if re.match(pa_url, url): _url = url.replace('a', 'v') else: _url=url # new_url='http://www.wq114.org/weixin.php?url={}'.format(_url[21:]) new_url='http://www.wq114.org/weixin.php?url={}'.format(_url) return new_url elif flag == "1": if re.match(pa_url, url): _url = url.replace('a', 'v') else: _url = url new_url='http://www.wmxz.wang/video.php?url={}'.format(_url) return new_url def play_movie(self,url,flag): play_url=self.url_change(url,flag) print('播放地址:',play_url) web = webdriver.Chrome() web.get(play_url) if __name__ == '__main__': p=Pro()
相關推薦
基於tkinter+python36製作得視訊播放器,非會員也可播放
首先附上2個播放地址,可以解析視訊網站,我只是個視訊搬運工,暫時未新增下載功能。 www.wq114.org/weixin.php?url= http://www.wmxz.wang/video.php?url= 兩個網站都可快速解析出視訊播放地址 上圖 t
基於emWin的WAV,MP3軟解軟件播放器,帶類似千千靜聽頻譜,含uCOS-III和FreeRTOS兩個版本
歌曲列表 span 事件 分享圖片 info 復制粘貼 說明 模態 界面 第9期:WAV,MP3軟解播放器,帶類似千千靜聽頻譜配套例子:V6-916_STemWin提高篇實驗_WAV,MP3軟解播放器,帶類似千千靜聽頻譜(uCOS-III)V6-917_STemWin提高篇
html中嵌入flvplayer.swf播放器,播放視訊
html中嵌入flvplayer.swf播放器,播放視訊 只需要改動紅色的程式碼: <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-4445535411111' codebase='http://download.macromedia.co
Unity使用VideoPlayer在安卓上製作播放器,有畫面卡住的問題
出現的問題: 使用slider製作進度條來控制VideoPlayer播放視訊的進度,調整進度條值會出現畫面卡住,過了很久才會恢復的問題。 出現問題版本:Unity 2017.4.1f1 猜測的
22_Android中的本地音樂播放器和網路音樂播放器的編寫,本地視訊播放器和網路視訊播放器,照相機案例,偷拍案例實現
1 編寫以下案例:當點選了”播放”之後,在手機上的/mnt/sdcard2/natural.mp3就會播放。2 編寫佈局檔案activity_main.xml<LinearLayout xmlns
基於android的網路音樂播放器-回撥實現音樂播放及音樂收藏的實現(三)
作為android初學者,最近把瘋狂android講義和瘋狂Java講義看了一遍,看到書中介紹的知識點非常多,很難全部記住,為了更好的掌握基礎知識點,我將開發一個網路音樂播放器-EasyMusic來鞏固下,也當作是練練手。感興趣的朋友可以看看,有設計不足的地方也
關於頁面裡面巢狀視訊播放器,使用彈出層之後會被視訊擋住
<embed src="http://www.iqiyi.com/player/20140611102651/Player.swf?albumId=250686800&tvId=250686800&autoplay=true&cyclePlay=false&exclusi
javaCV開發詳解之4:轉流器實現(也可作為本地收流器、推流器,新增新增圖片及文字水印,視訊影象幀儲存),實現rtsp/rtmp/本地檔案轉發到rtmp流媒體伺服器(基於javaCV-FFMPEG)
javaCV系列文章: 補充篇: 歡迎大家積極開心的加入討論群 javacpp-ffmpeg: 前言: 本章基於javaCV實現轉流器和收流器功能,測試採用監控rtsp地址轉發至rtmp伺服器地址 新增openCV儲存圖片功能。 補充:
安卓線上視訊播放器,視訊路徑為中文
最近在寫一個視訊APP,做播放器時發現伺服器中視訊路徑為中文還有很多“《”,“》”,“-”等等這樣的特殊符號,安卓播放器無法識別中文字元,所以就想著將路徑轉碼成UTF-8格式的。一般我們都會用到URL
Android------視訊播放器(包含全屏播放,快退,快進,騰訊新聞的列表播放等)
前段時間做了一個新聞APP,涉及到了列表視訊播放,和騰訊新聞APP差不多,總結了一下程式碼,寫了一個Demo來分享給大家。用了 TabLayout+RecylerView+自定義視訊控制元件 完成的 列表中支援全屏播放來看看效果圖: 列表類程式碼:public clas
iOS開發之仿微博視訊邊下邊播之自定義AVPlayer播放器, 邊下邊播解剖。視訊處理流程,建立連線-請求資料-統籌資料-解碼資料-視訊呈現
Tips:這次的內容分為兩篇文章講述 01、[iOS]仿微博視訊邊下邊播之封裝播放器 講述如何封裝一個實現了邊下邊播並且快取的視訊播放器。 02、[iOS]仿微博視訊邊下邊播之滑動TableView自動播放 講述如何實現在tableView中滑動播放視訊,並且是流暢,不阻塞
aliplaye,rH5同層播放器,解決Android端wap視訊點選全屏問題
做直播專案時候在h5播放器方面遇到一些問題。 先說需求。主要是在微信瀏覽器開啟,上面是視訊播放視窗,下面是對話互動視窗,介面類似下圖 預想的是,上邊視訊可以小窗播放,下面可以傳送訊息。在ios系統是可以實現,但坑爹的是,在安卓上沒辦法實
頁面裡嵌入播放器,並獲取當前視訊的播放總時間
<html><head><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><title>電子表單設計師(e-form Designer)使用手
推薦下:開源ckplayer 網頁播放器, 跨平臺(html5, mobile),flv, f4v, mp4, rtmp協議. webm, ogg, m3u8 !
網頁播放器 get ... 默認 control firefox ckplayer 原本 auto 視頻播放, 原本是想h5 自帶視頻播放,使用很簡單,結果現實很骨感。 <video controls="controls" preload="auto" height
工業串口觸摸屏開發制作mp3播放器,單片機或PLC通過串口控制播放MP3音頻方法
百分比 通訊 觸摸 參與 blog 設備 並行 周期 運行 工業串口觸摸屏開發制作mp3播放器,單片機或PLC通過串口控制播放MP3音頻方法 在工業控制系統中將音樂或語音MP3的美和工控結合在一起,給人以賞心悅目的感受。隨著工業控制的發展,對工業控制的控制要求也越來越高,使
零基礎讀懂視頻播放器控制原理: ffplay 播放器源代碼分析
5.4 編碼方式 是否播放 都對 enum 其中 mat 源碼 開始 https://www.qcloud.com/community/article/535574001486630869 視頻播放器原理其實大抵相同,都是對音視頻幀序列的控制。只是一些播放器在音視頻同步上可
基於Wi-Fi的HID註射器,利用WHID攻擊實驗
繼續 leon data- 設置 hsl password leonardo mode uart WHID 代表基於 Wi-Fi 的 HID 註射器,即對 HID 攻擊進行無線化攻擊的一種註入工具。 實驗攻擊原理如下圖: 攻擊者使用ESP8266作為AP,在自己的電腦
用javascript和html5做一個音樂播放器,附帶源碼
功能 優化 str 自由 所有 音樂app 作者 弧形 ner 效果圖: 實現的功能 1、首頁 2、底部播放控件 3、播放頁面 4、播放列表 5、排行榜 6、音樂搜索 輸入搜索關鍵詞,點擊放大鏡圖標 7、側邊欄 目錄結構 開發心得與總結 1、輪播圖 首
linux下最好用的視頻播放器,mplayer,smplayer怎麽安裝 播放黑屏
安裝 linux下 依賴 smplayer 播放器 install yum命令 log 首選項 推薦一款linux環境下好用的視頻播放器 mplayer沒有圖形化界面 smplayer是mplayer的有圖形化界面的軟件 用yum命令安裝 yum install smpl
Android 音視頻深入 十三 OpenSL ES 制作音樂播放器,能暫停和調整音量(附源碼下載)
音視頻 OpenSL ES 項目地址https://github.com/979451341/OpenSLAudio OpenSL ES 是基於NDK也就是c語言的底層開發音頻的公開API,通過使用它能夠做到標準化, 高性能,低響應時間的音頻功能實現方法。 這次是使用OpenSL ES來做一個音樂播