Python---requests以及正则获取电影资源,PC端以及安卓端均可使用

俗话说的好,饿死偷懒儿的,撑死勤快的,自己动手,丰衣足食,告别广告,告别无卡顿。
更多原创博客分享见博客主页

程序说明

  1. 个人在使用,无论是PC端还是Android端,都不是像某讯视频、爱某艺视频客户端一样的界面,都并不美观,运行出来的程序都只是控制台黑窗口的形式,并且播放形式为浏览器中播放。若介意,请直接跳过
  2. 只是分享一个思路,不确保可以永久使用,如有其他更改,会更新博客
  3. 可以GUI让界面更加美观,在文章结尾有展示,但是暂不提供
  4. PC端、Android端 均无广告,清新明了,无需任何配置,打开即用

PC 端

所用工具

  1. Pycharm Community 2019.3.1
  2. 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 端

程序运行环境

  1. COL-AL10
  2. Android 10
  3. 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值