侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python动态视频下载器的实现方法

Python  /  管理员 发布于 7年前   235

这里向大家分享一下python爬虫的一些应用,主要是用爬虫配合简单的GUI界面实现视频,音乐和小说的下载器。今天就先介绍如何实现一个动态视频下载器。

爬取电影天堂视频

首先介绍的是python爬取电影天堂网站的视频(包括电影,电视剧,综艺等),主要是用selenium动态网页技术加上简单的爬虫技术。

(1)电影网站首页面地址:https://www.dytt8.net/

(2)用到的技术:selenium模拟浏览器运行。

(3)首先要安装配置selenium库和不同浏览器和该库配合的插件。这里安装配置的过程略过。

(4)然后我们用下面的代码打开首页,并输出该网页的源码:

def getSource(url): browser = webdriver.Chrome() browser.get(url) print(browser.page_source) browser.close()

(5)然后我们找到搜索对应的网页元素标签,以及选择类型和立即搜索按钮对应的标签。

分别为:

(6)然后我们用下面的代码把用户输入的信息模拟放到浏览器上

  由于未加载完毕会进入广告页面,因此有需要改进的地方,这时就需要延长载入时间。这里有显示等待和隐式等待,用简单的隐式等待即可。

有时候会出现错误,因为掩盖的div可能会在进行一些操作后,会消失,比如页面还在loading中。这时候点击元素的话,就直接点击在loading的标签上,所以在这个操作前可以加个等待,让掩盖的div自行消失后,再等待左侧菜单到可点击状态即可;或者进行刷新的操作,此div即可消失,再等待左侧菜单到可点击状态即可。

代码为:

def putUserMessger(url,this_name,this_type): ''' :param url: 浏览器网址 :param this_name: 需要下载的视频名 :param this_type: 需要下载的视频类型 ''' this_browser = webdriver.Chrome() this_browser.implicitly_wait(10) this_browser.get(url) # 把下载的视频名和视频类型进行模拟浏览器匹配 # 搜索输入框的标签属性有name和class,这里用name属性进行获取 this_browser.find_element_by_name('keyword').send_keys(this_name) time.sleep(2) # 选择类型下拉框是html自带的下拉框,不是input做的假的下拉框 Select(this_browser.find_element_by_name('field')).select_by_visible_text(this_type) time.sleep(2) # 点击立即搜索按钮,submit就不是单纯的单击,它会涉及到前后台的交互 this_browser.find_element_by_name('Submit').click() this_browser.close()def main(): name = input('请输入视频名:') type = input('请选择类型:') url = 'https://www.dytt8.net/' putUserMessger(url,name,type)

  但是还是会出现下面的问题:

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <input name="Submit" type="Submit" value="立即搜索"> is not clickable at point (702, 220). Other element would receive the click: <div style="width: 1017px; height: 577px;"></div> (Session info: chrome=73.0.3683.86) (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17134 x86_64)

但是我们发现我们点击后的其实是有规律的,因此用另一个方法。

(6)二层页面配置参数及视频三层地址输出

我们先分析一下url:

分析第二层页面地址为:

http://s.ygdy8.com/plus/so.php?typeid=1&keyword=%C4%E3%B5%C4%C3%FB%D7%D6

是由http://s.ygdy8.com/plus/so.php?+typeid=视频编号&keyword=视频名gdk编码组成。因此需要先转化汉字为网页地址url的编码。

用下面的代码就可以构建一个需要的网址:

def main(): name = input('请输入视频名:') type = input('请选择类型:') ret = quote(name, encoding="gbk") dict = {'电影':'1','电视剧':'2','综艺':'99','旧综艺':'89','游戏':'19','动漫':'16'} url = 'http://s.ygdy8.com/plus/so.php?' + 'typeid=' + dict[type] + '&keyword=' + ret

然后我们分析一下网页:


输出所有的视频信息和三级地址:

def putUserMessger(url): ''' :param url: 视频网址 ''' this_browser = webdriver.Chrome() this_browser.get(url) # 用css选择器选择 input1 = this_browser.find_elements_by_css_selector('.co_content8 ul td a') for i in input1:  print(i.text)  print(i.get_attribute('href')) this_browser.close()

(7)三级网页找到下载界面

下载的链接的位置是:

然后用request配合pyquery下载即可。

下载链接如下:

(8)完整代码

这里没有用到数据库,上面的代码再配合界面,这里只暂时没有界面的代码如下:

# encoding: utf-8from selenium import webdriverfrom urllib.request import quoteimport requestsfrom pyquery import PyQuery as pqfrom tkinter import *def putUserMessger(url): ''' :param url: 视频网址 ''' last_url = {} this_browser = webdriver.Chrome() this_browser.get(url) # 用css选择器选择 input1 = this_browser.find_elements_by_css_selector('.co_content8 ul td a') for i in input1:  #用字典保存视频的名字与下载地址  last_url[i.text] = i.get_attribute('href') this_browser.close() return last_urldef download(all_url): this_download = {} for name,url in dict.items(all_url):  r = requests.get(url)  r.encoding = r.apparent_encoding  doc = pq(r.text)  this_url = doc('#Zoom a')  this_download[name] = this_url.attr('href') return this_downloadtype = 0name = 0def myRadiobutton(): global type type = v.get()def my_all(): name = var.get() ret = quote(name, encoding="gbk") url = 'http://s.ygdy8.com/plus/so.php?' + 'typeid=' + str(type) + '&keyword=' + ret all_url = putUserMessger(url) result = download(all_url) print(result)# 创建一个主窗口,用于容纳整个GUI程序root = Tk()# 设置主窗口对象的标题栏root.title("视频下载器")L1 = Label(root, text="请选择类型:")L1.pack(side = TOP)v = IntVar()Radiobutton(root, text='电影', variable=v, command=myRadiobutton,value=1).pack(anchor=W)Radiobutton(root, text='电视剧', variable=v, command=myRadiobutton,value=2).pack(anchor=W)Radiobutton(root, text='综艺', variable=v, command=myRadiobutton,value=99).pack(anchor=W)Radiobutton(root, text='旧综艺', variable=v, command=myRadiobutton,value=89).pack(anchor=W)Radiobutton(root, text='游戏', variable=v, command=myRadiobutton,value=19).pack(anchor=W)Radiobutton(root, text='动漫', variable=v, command=myRadiobutton,value=16).pack(anchor=W)var = StringVar()L2 = Label(root, text="请输入视频名")L2.pack(side = LEFT)E1 = Entry(root, bd=5,textvariable=var)E1.pack(side = RIGHT)B = Button(root, text="点我",command=my_all).place(x=120, y=80)# 显示界面,进入主事件循环root.mainloop()

结果如下:

总结

以上所述是小编给大家介绍的python动态视频下载器的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


  • 上一条:
    python tkinter组件摆放方式详解
    下一条:
    python tkinter基本属性详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客