最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python動態(tài)視頻下載器的實現(xiàn)方法

 更新時間:2019年09月16日 09:00:53   作者:一只帥氣的IT小昂  
這里向大家分享一下python爬蟲的一些應(yīng)用,主要是用爬蟲配合簡單的GUI界面實現(xiàn)視頻,音樂和小說的下載器。今天就先介紹如何實現(xiàn)一個動態(tài)視頻下載器,需要的朋友可以參考下

這里向大家分享一下python爬蟲的一些應(yīng)用,主要是用爬蟲配合簡單的GUI界面實現(xiàn)視頻,音樂和小說的下載器。今天就先介紹如何實現(xiàn)一個動態(tài)視頻下載器。

爬取電影天堂視頻

首先介紹的是python爬取電影天堂網(wǎng)站的視頻(包括電影,電視劇,綜藝等),主要是用selenium動態(tài)網(wǎng)頁技術(shù)加上簡單的爬蟲技術(shù)。

(1)電影網(wǎng)站首頁面地址:https://www.dytt8.net/

(2)用到的技術(shù):selenium模擬瀏覽器運行。

(3)首先要安裝配置selenium庫和不同瀏覽器和該庫配合的插件。這里安裝配置的過程略過。

(4)然后我們用下面的代碼打開首頁,并輸出該網(wǎng)頁的源碼:

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

(5)然后我們找到搜索對應(yīng)的網(wǎng)頁元素標(biāo)簽,以及選擇類型和立即搜索按鈕對應(yīng)的標(biāo)簽。

分別為:

(6)然后我們用下面的代碼把用戶輸入的信息模擬放到瀏覽器上

  由于未加載完畢會進(jìn)入廣告頁面,因此有需要改進(jìn)的地方,這時就需要延長載入時間。這里有顯示等待和隱式等待,用簡單的隱式等待即可。

有時候會出現(xiàn)錯誤,因為掩蓋的div可能會在進(jìn)行一些操作后,會消失,比如頁面還在loading中。這時候點擊元素的話,就直接點擊在loading的標(biāo)簽上,所以在這個操作前可以加個等待,讓掩蓋的div自行消失后,再等待左側(cè)菜單到可點擊狀態(tài)即可;或者進(jìn)行刷新的操作,此div即可消失,再等待左側(cè)菜單到可點擊狀態(tài)即可。

代碼為:

def putUserMessger(url,this_name,this_type):
 '''
 :param url: 瀏覽器網(wǎng)址
 :param this_name: 需要下載的視頻名
 :param this_type: 需要下載的視頻類型
 '''
 this_browser = webdriver.Chrome()
 this_browser.implicitly_wait(10)
 this_browser.get(url)
 # 把下載的視頻名和視頻類型進(jìn)行模擬瀏覽器匹配
 # 搜索輸入框的標(biāo)簽屬性有name和class,這里用name屬性進(jìn)行獲取
 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)

  但是還是會出現(xiàn)下面的問題:

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)

但是我們發(fā)現(xiàn)我們點擊后的其實是有規(guī)律的,因此用另一個方法。

(6)二層頁面配置參數(shù)及視頻三層地址輸出

我們先分析一下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編碼組成。因此需要先轉(zhuǎn)化漢字為網(wǎng)頁地址url的編碼。

用下面的代碼就可以構(gòu)建一個需要的網(wǎng)址:

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

然后我們分析一下網(wǎng)頁:


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

def putUserMessger(url):
 '''
 :param url: 視頻網(wǎng)址
 '''
 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)三級網(wǎng)頁找到下載界面

下載的鏈接的位置是:

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

下載鏈接如下:

(8)完整代碼

這里沒有用到數(shù)據(jù)庫,上面的代碼再配合界面,這里只暫時沒有界面的代碼如下:

# 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: 視頻網(wǎng)址
 '''
 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)
# 創(chuàng)建一個主窗口,用于容納整個GUI程序
root = Tk()
# 設(shè)置主窗口對象的標(biāo)題欄
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)
# 顯示界面,進(jìn)入主事件循環(huán)
root.mainloop()

結(jié)果如下:

總結(jié)

以上所述是小編給大家介紹的python動態(tài)視頻下載器的實現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Python實現(xiàn)將n個點均勻地分布在球面上的方法

    Python實現(xiàn)將n個點均勻地分布在球面上的方法

    這篇文章主要介紹了Python實現(xiàn)將n個點均勻地分布在球面上的方法,涉及Python繪圖的技巧與相關(guān)數(shù)學(xué)函數(shù)的調(diào)用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 一文詳細(xì)介紹Python兩條斜杠 // 的作用和用法

    一文詳細(xì)介紹Python兩條斜杠 // 的作用和用法

    Python中的兩條斜杠//是整數(shù)除法運算符,返回商的整數(shù)部分,丟棄小數(shù)部分,它與取模運算符%經(jīng)常一起使用,幫助理解除法的整數(shù)和余數(shù),與普通除法運算符/不同,//總是返回整數(shù)結(jié)果,在處理負(fù)數(shù)時,//會向絕對值更大的方向取整,本文就來介紹一下
    2024-11-11
  • Python json格式化打印實現(xiàn)過程解析

    Python json格式化打印實現(xiàn)過程解析

    這篇文章主要介紹了Python json格式化打印實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 對python以16進(jìn)制打印字節(jié)數(shù)組的方法詳解

    對python以16進(jìn)制打印字節(jié)數(shù)組的方法詳解

    今天小編就為大家分享一篇對python以16進(jìn)制打印字節(jié)數(shù)組的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python將logging模塊封裝成單獨模塊并實現(xiàn)動態(tài)切換Level方式

    python將logging模塊封裝成單獨模塊并實現(xiàn)動態(tài)切換Level方式

    這篇文章主要介紹了python將logging模塊封裝成單獨模塊并實現(xiàn)動態(tài)切換Level方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python實現(xiàn)的二叉樹定義與遍歷算法實例

    python實現(xiàn)的二叉樹定義與遍歷算法實例

    這篇文章主要介紹了python實現(xiàn)的二叉樹定義與遍歷算法,結(jié)合具體實例形式分析了基于Python定義的二叉樹及其常用遍歷操作實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • 淺談Python爬蟲原理與數(shù)據(jù)抓取

    淺談Python爬蟲原理與數(shù)據(jù)抓取

    這篇文章主要介紹了淺談爬蟲原理與數(shù)據(jù)抓取,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 一文向您詳細(xì)介紹指令 python -m pip install的用法和功能

    一文向您詳細(xì)介紹指令 python -m pip install的用法和功能

    通過本文的介紹,我們詳細(xì)了解了python -m pip install命令的用法和功能,從基本用法到安裝特定版本的包、從其他源安裝包、升級和卸載包,再到使用requirements.txt管理依賴,我們逐步深入了解了pip的強(qiáng)大功能,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Pycharm?cannot?set?up?a?python?SDK問題的原因及解決方法

    Pycharm?cannot?set?up?a?python?SDK問題的原因及解決方法

    這篇文章主要給大家介紹了關(guān)于Pycharm?cannot?set?up?a?python?SDK問題的原因及解決方法,這個問題已經(jīng)不是第一次出現(xiàn)了,所以干脆總結(jié)下,需要的朋友可以參考下
    2022-06-06
  • Django解決frame拒絕問題的方法

    Django解決frame拒絕問題的方法

    這篇文章主要介紹了Django解決frame拒絕問題的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論

万安县| 洞口县| 隆子县| 包头市| 唐海县| 西贡区| 临海市| 阳西县| 武强县| 余干县| 任丘市| 金溪县| 巴南区| 弥渡县| 耒阳市| 墨竹工卡县| 中江县| 皋兰县| 道真| 兴城市| 宿松县| 新巴尔虎右旗| 盐边县| 浦城县| 乾安县| 武定县| 仪陇县| 襄汾县| 拜城县| 晋宁县| 济源市| 巴林右旗| 翁牛特旗| 钦州市| 宝丰县| 青州市| 佛山市| 韶山市| 玛沁县| 云林县| 原阳县|