俗话说的好,饿死偷懒儿的,撑死勤快的,自己动手,丰衣足食,告别广告,告别无卡顿。
更多原创博客分享见博客主页。
程序说明
- 个人在使用,无论是PC端还是Android端,都不是像某讯视频、爱某艺视频客户端一样的界面,都并不美观,运行出来的程序都只是控制台黑窗口的形式,并且播放形式为浏览器中播放。若介意,请直接跳过
- 只是分享一个思路,不确保可以永久使用,如有其他更改,会更新博客
- 可以GUI让界面更加美观,在文章结尾有展示,但是暂不提供
- PC端、Android端 均无广告,清新明了,无需任何配置,打开即用
PC 端
所用工具
- Pycharm Community 2019.3.1
- requests、re
三大模块
搜索
通过爬取ok资源采集获取影片信息
# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
import requests
import re
# 下载网页源代码,这个网站很大方,不用添加任何的请求头,便可获取信息,安逸
def download_url(video_name = None):
search_url = 'http://www.okzy.co/index.php?m=vod-search'
# Ajax请求,这是一个调用的接口,请求信息包括两项 关键字即电影名称、提交方式即固定的 search
from_data = {
'wd':video_name,
'submit':'search'
}
# 发送请求,获得网页源代码
response = requests.get(url = search_url,params = from_data)
response.encoding = 'utf-8'
html = response.text
return html
# 解析源代码,对于这个网站,利用正则表达式非常简单,获得已有的电影名称以及地址
def parse_html(text = None):
# 将名称、地址作为键名、键值存入字典中
video_urls_dic = {}
video_urls = re.findall('<span class="xing_vb4"><a href="(.*?)" target="_blank">(.*?)</a></span>',text)
# 如果去看一看原代码中的地址,会发现,获得的地址是残缺的,需要手动拼接才是真正的地址
for video_url in video_urls:
video_urls_dic[video_url[1]] = 'http://www.okzy.co/' + video_url[0]
return video_urls_dic
# 将获得的信息保存到本地,也可以直接动态的加载到一个列表里而省去保存本地的操作
# 之所以这样写,是想保存一个播放过的记录,以便下次可以从这里接着播放
def get_message(keyword = None):
with open('./video_url.txt', 'w', encoding='utf-8') as f:
f.write('')
with open('./search.txt','w',encoding = 'utf-8') as f:
f.write('')
video_dic = parse_html(text = download_url(video_name = keyword))
for name in video_dic.keys():
with open('./search.txt', 'a', encoding='utf-8') as f:
f.write('{},{}'.format(name,video_dic[name]))
f.write('\n')
选择
# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
# 把搜索到的电影打印出来,供选择
def download_video_urls(url = None):
with open('./search.txt', 'r', encoding='utf-8') as f:
videos = f.readlines()
# 字典中存放可以观看的电影,但为了方便选择,以变量j为键名
video_dic = {}
j = 1
# 将存在的电影打印出,并放入字典
for video in videos:
video = video.split(',')
print(str(j) + '\t' + video[0])
video_dic[j] = video[1]
j += 1
# 选择观看的电影
while True:
video_which = int(input('观看的序号:'))
if video_which <= len(videos):
break
else:
print('输入错误,检查后再次输入序号:')
# 加载所选电影的版本即国语、英文或者电视剧的集数
html = requests.get(url = video_dic[video_which]).text
video_contents = re.findall('<li><input type="checkbox" name="copy_sel" value="(.*?)" checked="" />.*?</li> ',html)
# 各种 if 是为了筛选直接可以播放的电影
for video_content in video_contents:
if video_content != 'checkbox':
if '.m3u8' not in video_content:
if '.mp4' not in video_content:
with open('./video_url.txt','a',encoding = 'utf-8') as f:
f.write(video_content)
f.write('\n')
获取链接
# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
import webbrowser
# 这个函数在调用时,可以加一个循环,或者再添加一个功能获取影片时长,实现自动下一集的播放
def watch_which():
with open('./video_url.txt', 'r', encoding='utf-8') as f:
videos = f.readlines()
print('已更新 %s 集节目'%len(videos))
num_page = int(input('观看第几集:'))
with open('./record_last.txt','w',encoding = 'utf-8') as f:
f.write(str(num_page))
f.write('\t')
webbrowser.open(url = videos[num_page - 1])
Android 端
程序运行环境
- COL-AL10
- Android 10
- QPython 3H
以上三个条件是程序调试的环境,必备条件是安卓系统,苹果系统不可用
三大模块
搜索
# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
# 下载网页
def download_url(video_name = None):
search_url = 'http://www.okzy.co/index.php?m=vod-search'
from_data = {
'wd':video_name,
'submit':'search'
}
response = requests.get(url = search_url,params = from_data)
response.encoding = 'utf-8'
html = response.text
return html
# 提取信息
def parse_html(text = None):
video_urls_dic = {}
video_urls = re.findall('<span class="xing_vb4"><a href="(.*?)" target="_blank">(.*?)</a></span>',text)
for video_url in video_urls:
video_urls_dic[video_url[1]] = 'http://www.okzy.co/' + video_url[0]
return video_urls_dic
选择
# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
def download_video_urls(url = None):
with open('./search.txt', 'r', encoding='utf-8') as f:
videos = f.readlines()
video_dic = {}
j = 1
for video in videos:
video = video.split(',')
print(str(j) + '\t' + video[0])
video_dic[j] = video[1]
j += 1
while True:
video_which = input('观看的序号:')
if len(video_which) != 0:
video_which = int(video_which)
if video_which <= len(videos):
break
else:
print('输入错误,检查后再次输入序号:')
with open('./video_name.txt', 'w', encoding='utf-8') as f:
f.write(videos[video_which - 1])
html = requests.get(url = video_dic[video_which]).text
video_contents = re.findall('<li><input type="checkbox" name="copy_sel" value="(.*?)" checked="" />.*?</li> ',html)
for video_content in video_contents:
if video_content != 'checkbox':
if '.m3u8' not in video_content:
if '.mp4' not in video_content:
with open('./video_url.txt','a',encoding = 'utf-8') as f:
f.write(video_content)
f.write('\n')
获取链接
# Author:smart_num_1
# Blog:https://blog.csdn.net/smart_num_1
def watch_which(record = False,name = ''):
with open('./video_url.txt', 'r', encoding='utf-8') as f:
videos = f.readlines()
if record:
droid.startActivity("android.intent.action.VIEW",videos[record - 1])
while True:
os.system('clear')
print('当前播放节目:%s'%name)
print('已更新 %s 集节目'%len(videos))
num_page = input('观看第几集(不输入返回上一层):')
if num_page == '':
break
num_page = int(num_page)
with open('./record_last.txt','w',encoding = 'utf-8') as f:
f.write(str(num_page))
f.write('\t')
droid.startActivity("android.intent.action.VIEW",videos[num_page - 1])
成品展示
PC
本文章对应程序效果
搜索以及选择观看集数后,程序会自动调用浏览器进行播放
Android
PC端exe成品、源码获取方式
下载链接 提取码: csnd