'''
本代码实现了一键获取80s手机电影网的电影下载连接
用户可以通过下拉框进行电影种类的筛选,比如国语、动作、2019、美国等等
实现本代码主要用到了Pyhton中的以下知识点:
requests库,正则表达式,GUI
接下来将对代码进行整体说明
'''import requests
import re
import tkinter as tk
import sys
from tkinter import ttk#通过观察80s网不同网页的链接可以了解到,通过如下链接去获取不同的类型https://www.y80s.net/movie/list/分类-年代-地区-语言-
#根据这一点建立不同的字典,将类型与编号一一对应,当用户选择这个类型的是后就可以通过字典的键值对去获取
Language = { "国语":1 , "英语":2 , "韩语":3 , "日语":4 , "法语":5 , "其他":6 , "粤语":7 }
Type = { "动作":1,"喜剧":2,"爱情":3,"科幻":4,"灾难":5,"恐怖":6,"悬疑":7,"奇幻":8,"战争":9 }
Place = { "大陆":1,"香港":2,"台湾":3,"美国":4,"法国":5,"英国":6,"日本":7,"韩国":8,"德国":9 }
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
}#获取指定页面的网页源代码
def get_txt(url):r = requests.get(url,headers=headers)r.encoding = r.apparent_encodingreturn r.textdef set_url():# 80s网站,不同的分类链接有一定的规律:https://www.y80s.net/movie/list/分类-年代-地区-语言-#通过字典获取不同的结果language = Language.get(comLanguage.get())type = Type.get(comType.get())year = comYear.get()place = Place.get(comPlace.get())url = "https://www.y80s.net/movie/list/"+str(type)+'-'+str(year)+'-'+str(place)+'-'+str(language)+'-'return url#利用正则表达式对得到的网页源码进行筛选,选出我们想要的内容
def select_txt():name = []link = []url = set_url()s = get_txt(url)'''由于电影不同类型的堆叠,很有可能会出现找不到这一类电影的情况,比如国语-奇幻-2016-法国,满足这样四个标准的电影就没有就需要进行判断,我们发现当没有这类电影的时候,源代码会出现一个特有的标签<div class="nomoviesinfo">,那么就可以利用这个标签'''k = re.findall('div class="nomovies(.*)">',s)   #利用正则表达式去找这个特殊标签#如果返回的数组k长度为0,说明没有这个特有标签,那么就是有满足要求的电影,就可以继续爬取if len(k) == 0:for j in re.findall('src="//img.mimiming.com/img/grey.gif" alt="(.*)" class="p" /> ',s):name.append(j)else:for i in re.findall('<h3 class="h3"><a href="(.*?)">',s):link.append("https://www.y80s.net"+i)else:entryResult.insert(0,'对不起,没有符合该筛选条件的视频,请您放宽筛选条件')#如果返回的k长度不为0,说明有这个特有的标签,那么此时就不存在满足要求的电影return name,link#获取了名字和符合要求的电影链接后,还需要通过不同的电影链接去获取下载该资源的链接
def down_link():name,link = select_txt()downlink = []   #创建一个downlink数组,存放下载链接for i in range(len(link)):s = get_txt(link[i])i = re.findall('thunderType="" thunderPid="127891" thunderHref="(.*)">迅雷下载</A>',s)downlink.append(i)return name,downlink#将爬取的电影名和下载链接变成字典,通过txt文件保存
def save_txt():path = entryPath.get()name,downlink = down_link()dir = dict(zip(name,downlink))f = open(path, 'w', encoding='utf-8')for k, v in dir.items():s2 = str(v)f.write(k + '\n')f.write(s2 + '\n')f.close()entryResult.insert(0, '保存成功')#清空,将存放地址和存放结果两栏清空
def clear():entryPath.delete(0 , 'end')entryResult.delete(0 , 'end')#退出本程序
def exit():sys.exit(0)rootMovie = tk.Tk()
rootMovie.title("80s电影连接提取器")
rootMovie['height'] = 500
rootMovie['width'] = 750# 创建不同的标签
LabelTitle = not tk.Label(rootMovie, font = "Helvetica 22 bold italic", text="电影链接一键获取器").place(x=220,y=30)
LabelType = tk.Label(rootMovie, font="GB-2312", text="语言:").place(x=100, y=100)
LabelType = tk.Label(rootMovie, font="GB-2312", text="分类:").place(x=360, y=100)
LabelType = tk.Label(rootMovie, font="GB-2312", text="年代:").place(x=100, y=200)
LabelYear = tk.Label(rootMovie, font="GB-2312", text="地区:").place(x=360, y=200)
LabelPath = tk.Label(rootMovie, font="GB-2312", text="存放地址:").place(x=100, y=280)
LabelResult = tk.Label(rootMovie, font="GB-2312", text="存放结果:").place(x=100, y=330)#可供输入的文本框
entryPath = tk.Entry(rootMovie)     #存放路径输入框
entryPath.place(x=200, y=280, width=400, height=30)
entryResult = tk.Entry(rootMovie)     #存放路径输入框
entryResult.place(x=200, y=330, width=400, height=30)#可供选择的下拉框
xVarLanguage = tk.StringVar()
comLanguage = ttk.Combobox(rootMovie,textvariable=xVarLanguage)
comLanguage.place(x=160, y=100, width=180, height=30)
comLanguage["value"] = ("国语", "粤语", "英语", "韩语", "日语", "法语", "其他")
comLanguage.current(0)xVarType = tk.StringVar()
comType = ttk.Combobox(rootMovie,textvariable=xVarType)
comType.place(x=420, y=100, width=180, height=30)
comType["value"] = ("动作","喜剧","爱情","科幻","灾难","恐怖","悬疑","奇幻","战争")
comType.current(0)xVarYear = tk.StringVar()
comYear = ttk.Combobox(rootMovie,textvariable=xVarYear)
comYear.place(x=160, y=200, width=180, height=30)
comYear["value"] = ("2019","2018","2017","2016","2015")
comYear.current(0)xVarPlace = tk.StringVar()
comPlace = ttk.Combobox(rootMovie,textvariable=xVarPlace)
comPlace.place(x=420, y=200, width=180, height=30)
comPlace["value"] = ("大陆","香港","台湾","美国","法国","英国","日本","韩国","德国")
comPlace.current(0)# 按钮
buttonGet = tk.Button(rootMovie, font="GB-2312", text="提取",command=save_txt).place(x=180, y=400, width=70, height=35)
buttonClear = tk.Button(rootMovie, font="GB-2312", text="清空", command=clear).place(x=320, y=400, width=70, height=35)
buttonExit = tk.Button(rootMovie, font="GB-2312", text="退出", command=exit).place(x=460, y=400, width=70, height=35)rootMovie.mainloop()

GUI界面以及结果演示


写的不好,共同学习

Python-一键获取电影资源链接实例解析(requests、正则表达式、GUI)相关推荐

  1. Python-基于80s的一键获取电影下载链接

    分析主要任务: 一键获取 80S手机电影网(https://www.y80s.net/)不同年代的电影下载链接,可以根据用户选择的不同年代比如XX年的XX类型电影来提取前4页(x个)不同电影的下载地址 ...

  2. 使用python下载加密的流媒体m3u8视频文件,获取电影资源

    使用python下载加密的流媒体m3u8视频文件,获取电影资源 m3u8简介 代码示例 获取文件名与m3u8地址 媒体序列解密 视频序列片段下载 完整代码 后记 m3u8简介 M3U8是Unicode ...

  3. python的用途实例-python进程池作用展示及实例解析

    在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...

  4. python中set()函数的用法,python中set()函数简介及实例解析

    python中set()函数简介及实例解析 set函数也是python内置函数的其中一个,属于比较基础的函数.其具体介绍和使用方法,下面进行介绍. set() 函数创建一个无序不重复元素集,可进行关系 ...

  5. Python爬虫获取电子书资源实战

    最近在学习Python,相对java来说python简单易学.语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高.大大提高了咱们的生产力. ...

  6. 教你使用Python爬虫获取电子书资源实战!喜欢学习的小伙伴过来看啦!

    最近在学习Python,相对java来说python简单易学.语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高.大大提高了咱们的生产力. ...

  7. 爬取电影网最新电影资源链接地址[1]

    爬取www.ygdy8电影资源的过程: 一.爬取电影网电影资源链接,代码段: # -*- coding: utf-8 -*- from bs4 import BeautifulSoup import ...

  8. 使用 Python 简单获取电影天堂的电影数据 [第一个爬虫小测试]

    一.要求 得到电影天堂的最新下载页面下的相关数据 点击打开 : 存储为 csv 格式的表格文件 二.可能遇到的bug和解决 使用正则表达式匹配到没有"<>"的情况 请求 ...

  9. Python爬虫实现电影资源下载方法

    本人python运行环境: IDE丨pycharm2.3 版本丨Python3.6 系统丨Windows 10 爬虫目的与思路: 实现目的与思路: 目的: 实现对电影目标url的解析与下载,由于第三方 ...

最新文章

  1. 学习Docker容器时,错误bash: ping: command not found的解决方法
  2. java中的ul是什么标签_li和ul标签用法举例
  3. Python自定义:粒子群优化算法
  4. 计算机网络学习笔记(7. 报文交换与分组交换①)
  5. unity三维地图的经纬度如何在二维地图上表示_安全数据分析:数据点—地图—线性回归...
  6. Linux内核IP Queue机制的分析
  7. 数字温度传感器DS18B20的数据手册理解
  8. 台达 PLC ISPSoft 3.16--项目文件解密
  9. 在本地计算机无法启动uGs,SIEMENS_NX 免安装版
  10. 石墨烯的精细结构研究取得进展
  11. 消防给水及消火栓系统技术规范_消防给水——消火栓系统分区给水剖析
  12. linux rpm -qip命令,linux rpm命令
  13. Android Jetpack中CameraX保存Bitmap
  14. no such file or directory, open '/Users/anna/package.json'的解决
  15. 十个要点让你的渲染更好
  16. MySQL自学笔记详细版(从安装到入门)
  17. 友元函数,友元类,类模板
  18. Python程序设计实战:输出古诗实战
  19. hexo 博客创建、部署、美化过程记录
  20. 关于处理npm ERR! Unexpected token in JSON at position...

热门文章

  1. react脚手架运用
  2. 四十四、栅格系统实现(JavaScript原生脚本、媒体查询)
  3. Python分数计算的实战代码
  4. 【flask】04.wtf表单的全部用法实现
  5. 【一周AI新鲜事】“擎天柱”霸气登场/全球创新指数中国排名11位/摩尔定律死了,又活了?...
  6. 【洛谷题解】P1803 凌乱的yyy/线段覆盖
  7. 计算机组成原理题库,计算机组成原理(本)习题库
  8. sqlmap 使用手册--推荐
  9. 无线视频监控系统 工业路由器组网
  10. 月薪没过万?对不起,你可能还不如搬砖的!