欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python動態視頻下載器

系統 1710 0

這里向大家分享一下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)然后我們找到搜索對應的網頁元素標簽,以及選擇類型和立即搜索按鈕對應的標簽。

python動態視頻下載器_第1張圖片

分別為:

python動態視頻下載器_第2張圖片

python動態視頻下載器_第3張圖片

?

(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 
            
            "
            
              Submit
            
            
              "
            
             type=
            
              "
            
            
              Submit
            
            
              "
            
             value=
            
              "
            
            
              立即搜索
            
            
              "
            
            > 
            
              is
            
            
              not
            
             clickable at point (702, 220). Other element would receive the click: 
            
" width: 1017px; height: 577px; " >
(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:
python動態視頻下載器_第4張圖片

分析第二層頁面地址為:

            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
          

然后我們分析一下網頁:
python動態視頻下載器_第5張圖片

python動態視頻下載器_第6張圖片

輸出所有的視頻信息和三級地址:

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

python動態視頻下載器_第7張圖片

(7)三級網頁找到下載界面

下載的鏈接的位置是:

python動態視頻下載器_第8張圖片

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

下載鏈接如下:

python動態視頻下載器_第9張圖片

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

結果如下:

python動態視頻下載器_第10張圖片

python動態視頻下載器_第11張圖片

python動態視頻下載器_第12張圖片

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: av在线免费播放网站 | 免费a级毛片 | 91精品一区二区 | 精久久久久 | 亚洲自拍另类 | 国产乱肥老妇国产一区二 | 婷婷久久综合九色综合九七 | 亚洲精品国产网红在线 | 亚洲欧美日韩一区二区在线观看 | 日韩一级片在线观看 | 日韩久久久久久 | 五月婷六月婷婷 | 一级毛片 在线播放 | 亚洲黄色高清视频 | 国产午夜精品一区二区三区 | aaa级片| 插下面视频 | 成人自拍偷拍 | 国产萝控精品福利视频免费观看 | 久久成人免费网 | 成人免费视频网站在线观看 | 免费又粗又硬进去好爽A片视频 | 欧美一级毛片不卡免费观看 | 天天操很很操 | 日本黄色大片免费看 | 国产精品久久久久久久久久日本 | 性69式视频在线观看免费 | 精品欧美日韩 | 久久99精品热在线观看15 | 国产成人精品久久亚洲高清不卡 | 国产精品国产成人国产三级 | 亚洲日本人成中文字幕 | 91最新在线 | 日产一一到六区麻豆 | 香蕉国产在线观看免费 | 男女无遮挡高清性视频直播 | 国产成人区 | 亚洲高清一区二区三区 | 天天插天天狠天天透 | 在线成人| 精品久久一区二区三区 |