Python動的動画をダウンロード

ここでは主にビデオ、音楽、小説のシンプルなGUIインターフェイスの実装と爬虫類で、あなたと一緒にいくつかのアプリケーションのPythonの爬虫類を共有することができます。今日は最初に動的なビデオのダウンローダを実装する方法について説明します。

 

ビデオムービー天国をクロール

まずPythonは簡単なクローラー技術と相まって、主に使用さセレン動的なWeb技術(映画、テレビドラマ、バラエティ、などを含む)、ビデオムービー天国のウェブサイトをクロール紹介。

(1)ホームムービーの顔住所:https://www.dytt8.net/

(2)技術の使用:セレンアナログブラウザが実行します。

(3)最初にインストールして、ライブラリ・セレン異なるブラウザを設定して、プラグインをライブラリにする必要があります。インストールの構成プロセスはここでは無視します。

(4)その後、我々は次のコードでホームページを開き、このページのソースを出力します。

デフのgetSource(URL):
    ブラウザ = webdriver.Chrome()
    browser.get(URL)
    プリント(browser.page_source)
    browser.close()

(5)その後、我々は、対応するページ要素のラベルの検索を見つけ、種類や検索今ボタンに対応するラベルを選択します。

それらは次の通りです:

 

(6)その後、我々は、ブラウザにユーザによってアナログ情報を入力するために、次のコードを使用します

  広告ページにロードされたので、改善の余地があるされていないので、我々は、ロード時間を延長する必要があります。ここでは、ディスプレイは待って待って、暗黙的な、シンプルな暗黙の待っています。

       時々エラーが発生div要素はいくつかの操作を行うことが可能です隠す、ページがまだロードされているような、消えます。要素上のこの時間をクリックし、[ラベルのロードを直接クリックし、その後の状態に上をクリックして離れて行くし、左側のメニューを待つDIVマスクされるように、この操作の前に、待機を追加することができ、またはリフレッシュ動作をこのdivが消え、その後、クリック可能な状態に左にメニューを待つことができます。

コード:

DEF putUserMessger(URL、this_name、this_type):
     '' ' 
    :PARAM URL:ブラウザのURL 
    :のparam this_name:ビデオ名ダウンロードする必要
    のparam this_type:ビデオタイプをダウンロードする必要性を
    ' '' 
    this_browser = webdriver.Chrome()
    this_browser。 implicitly_wait( 10 
    this_browser.get(URL) 
    名前ダウンロードしたビデオとアナログビデオブラウザの種類のマッチング
    #のタグ検索属性は、ここで取得した名称と、入力ボックスのクラス、name属性持っ 
    this_browser.find_element_by_name(キーワード)。 send_keys(this_name)
    time.sleep( 2 #は、タイプドロップダウンボックスは、HTMLが付属してドロップダウンボックスで選択するには、入力偽のドロップダウンボックスはありません 
    ((this_browser.find_element_by_nameを選択しますフィールド、))。Select_by_visible_text(this_type)
    time.sleep( 2 #はすぐに、それは簡単なクリックしないで提出し、検索ボタンをクリックして、それがテーブルの周りに相互作用伴います 
    this_browser.find_element_by_name(送信)).clickを(
    this_browser.close()


DEF メイン():
    名前 =入力(' を入力して下さいビデオ名:' 
    を入力 =入力(' タイプを選択します。' 
    URL = ' https://www.dytt8.net/ ' 
    putUserMessger(URL 、名前、タイプ)

  しかし、まだ次の質問があります:

selenium.common.exceptions.WebDriverException:メッセージ:不明なエラー:要素<入力名= " 送信"タイプ= " 送信"値= " 立即搜索" >  ない(702、220)の点でクリックできます。その他の要素は、クリックを受け取ることになる。<divのスタイル= " 幅:1017px;高さ:577px; " > </ DIV> セッション情報:クロム = 73.0.3683.86 
  (ドライバ情報:chromedriver = 73.0.3683.68(47787ec04b6e38e22703e856e101e840b65afe72)、プラットフォームを=のWindows NT 10.0.17134 x86_64版)

しかし、我々は、我々はをクリックし、その別の方法を使用した後、実際にパターンが存在することを発見しました。

(6)2階建ての3ページの設定パラメータとビデオ出力アドレス

私たちは、最初のURLを分析します:

第二層の分析ページのアドレスは次のとおりです。

http://s.ygdy8.com/plus/so.php?typeid=1 &キーワード =%のC4%E3%B5%C4%C3%FB%D7%D6

これは、ビデオhttp://s.ygdy8.com/plus/so.php?+typeid=の数でエンコードされた整数&キーワード=名前GDKビデオです。だから我々は、WebアドレスのURLエンコードのために中国語の文字を変換する必要があります。

次のコードは、Webサイトを構築するために必要とされるであろうと。

DEF メイン():
    名前 = INPUT(' を入力して下さいビデオ名:' 
    を入力 = INPUT(' 選択タイプ:' 
    RET =引用符(名前、エンコーディング= " GBK " 
    のdict = { ' 作品'' 1 '' ドラマ'' 2 '' 様々な'' 99 '' 昔のさまざまな'"89 "' ゲーム'' 19 '' 動画'' 16 ' } 
    URL = ' ?Http://s.ygdy8.com/plus/so.php ' + ' タイプID = ' +辞書[タイプ] + ' &キーワード= " + RET

その後、我々は、Webページを解析します:

すべての出力映像情報および三次住所:

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

结果如下:

 

おすすめ

転載: www.cnblogs.com/ITXiaoAng/p/11524648.html