ここでは主にビデオ、音楽、小説のシンプルな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()
结果如下: