python动态视频下载器

这里向大家分享一下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-8
from selenium import webdriver
from urllib.request import quote
import requests
from pyquery import PyQuery as pq
from 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_url

def 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_download

type = 0
name = 0

def 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()

结果如下:

原文地址:https://www.cnblogs.com/ITXiaoAng/p/11524648.html

时间: 2024-08-29 00:28:11

python动态视频下载器的相关文章

以下三种下载方式有什么不同?如何用python模拟下载器下载?

问题始于一个链接https://i1.pixiv.net/img-zip-...这个链接在浏览器打开,会直接下载一个不完整的zip文件 但是,使用下载器下载却是完整文件 而当我尝试使用python下载的时候 from urllib import request import sys request.urlretrieve('https://i1.pixiv.net/img-zip-ugoira/img/2017/04/05/00/24/41/62259492_ugoira600x600.zip'

爬虫学习——网页下载器和urllib2模块

什么是网页下载器? 一.网页下载器是爬虫的核心组件 二.常用的python网页下载器有urlilib2基础模块和requests第三方插件两种 urllib2支持功能:1.支持直接url下载:2.支持向网页直接输入的数据:3.支持需要登陆网页的cookie处理:4.需要代理访问的代理处理 三.urllib2的三种下载方法 方法一.直接下载法 相应代码如下: #-*-coding:utf-8-*- #调用urllib2模块 import urllib2 #直接请求 response=urllib2

Python 10min 面试题解析丨Python实现多连接下载器

作者:蜗牛 shengxinjing (woniuppp) · GitHub 今天群里看到有人问关于 Python 多线程写文件的问题,联想到这是 Reboot 的架构师班的入学题.我想了一下,感觉坑和考察的点还挺多的,可以当成一个面试题来问,简单说一下我的想法和思路吧,涉及的代码和注释在 GitHub 上 (https://github.com/shengxinjing/my_blog/blob/master/downloader/downloader.py) 当年的网络蚂蚁"多点同时下载.并

Python实现多线程HTTP下载器

本文将介绍使用Python编写多线程HTTP下载器,并生成.exe可执行文件. 环境:windows/Linux + Python2.7.x 单线程 在介绍多线程之前首先介绍单线程.编写单线程的思路为: 解析url: 连接web服务器: 构造http请求包: 下载文件. 接下来通过代码进行说明. 解析url 通过用户输入url进行解析.如果解析的路径为空,则赋值为'/':如果端口号为空,则赋值为"80":下载文件的文件名可根据用户的意愿进行更改(输入'y'表示更改,输入其它表示不需要更

Python实战:美女图片下载器,海量图片任你下载

Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本文是在前一部分Python基础之上Python实战:Python爬虫学习教程,获取电影排行榜,再次升级的Python网页爬虫实战课程. 1.项目概述. 利用XPath和requests模块进行网页抓取与分析,达到网页图片下载的效果. 抓爬图片地址:http://www.2c

用 python 实现一个多线程网页下载器

今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. keywords:python,http,multi-threads,thread,threading,httplib,urllib,urllib2,Queue,http pool,httppool 废话少说,上源码: 1 # -*- coding:utf-8 -*- 2 import urllib,

Bing图片下载器(Python实现)

分享一个Python实现的Bing图片下载器.下载首页图片并保存到到当前目录.其中用到了正则库re以及Request库. 大致流程如下: 1.Request抓取首页数据 2.re正则匹配首页图片URL 3.再次使用Request下载图片数据 源码: # --*-- encoding: UTF-8 --*-- """bingloader.py下载Bing.com首页图片""" import reimport sysimport osimport r

用python实现的百度音乐下载器-python-pyqt-改进版

之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt做的界面,在下载的过程中进行窗口操作,会出现UI阻塞的现象. 前两天有时间调整了一下,做了几方面的改进: 1.修改了UI界面阻塞的问题,下载的过程中可以进行其它的UI操作; 2.爬虫程序采用一个主线程,8个子线程的方式快速爬取,网络状况一致的情况下,将扫描100首歌曲的时间提高到了8.9秒左右:(本

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai