本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
小說、圖片、小視頻都弄了,今天就下載電影或者電視劇吧,目標網站:https://www.okzyw.com/
首先進入搜索頁面:https://www.okzyw.com/index.php?m=vod-search
搜索自己喜愛的劇(比如我就喜歡西部世界^ _ ^)

進入Network查看發現是POST請求:

我把資料也截下來了,直接上代碼就行:
import requests import parsel,os from ffmpy3 import FFmpeg from concurrent.futures import ThreadPoolExecutor as pool headers ={ 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' } wd = "西部世界第一季" params = { 'wd': wd, 'submit': 'search', } target = 'http://www.okzyw.com' url = 'https://www.okzyw.com/index.php?m=vod-search' html = requests.get(url,params=params,headers=headers).text res = parsel.Selector(html) for each in res.xpath('//div[@]/ul[2]/li'): link = target + each.xpath('./span[2]/a/@href').get() print(link)
內容頁拿到:
output:
http://www.okzyw.com/?m=vod-detail-id-12790.html
進入內容頁后我們需要將電影標題作為檔案夾,免得后面會亂:
html = requests.get(link).text res = parsel.Selector(html) # 獲取電影標題做檔案夾 title = res.xpath('//div[@]/h2/text()').get() # 創建檔案夾 if title not in os.listdir("./"): os.mkdir(title)
里面有兩種格式,我們選擇m3u8格式的:
因為是靜態網頁,我就直接上代碼了:
for each in res.xpath('//div[@id="2"]/ul/li'): # 獲取集數 num = each.xpath('./text()').get().split("$")[0] # 獲取每一集對應的鏈接 m3u8 = each.xpath('./input/@value').get() dic_url[m3u8] = num print(m3u8)
順利拿到:
接下來就是把m3u8格式的下載下來就行了,m3u8格式是由多個ts格式組成的,也是現在大多數網站都會選擇的方式,也就是說,你會了這個,然后再去爬其他的也同樣有用:
既然是由多個ts組成,那么如何合并呢,這里我們需要用到一個庫:ffmpy3
直接pip就行
pip install ffmpy3
之后就是兩行代碼就能將ts合并:
from ffmpy3 import FFmpeg FFmpeg(inputs={URL:None}, outputs={name:None).run()
不過在此之前需要下載一個檔案,解壓后將FFmpeg.exe放在py檔案目錄下,我已經放在網盤了,需要的朋友可以自行下載,這個是64位的,下載鏈接:在底部
因為每一集都有幾百M,所以開8個執行緒:
import requests import parsel,os from ffmpy3 import FFmpeg from concurrent.futures import ThreadPoolExecutor as pool headers ={ 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' } wd = input("請輸入您要下載的影片名稱(比如:西部世界第一季):") # wd = "西部世界第一季" params = { 'wd': wd, 'submit': 'search', } target = 'http://www.okzyw.com' url = 'https://www.okzyw.com/index.php?m=vod-search' html = requests.get(url,params=params,headers=headers).text res = parsel.Selector(html) for each in res.xpath('//div[@]/ul[2]/li'): link = target + each.xpath('./span[2]/a/@href').get() dic_url = {} html = requests.get(link).text res = parsel.Selector(html) # 獲取電影標題做檔案夾 title = res.xpath('//div[@]/h2/text()').get() # 創建檔案夾 if title not in os.listdir("./"): os.mkdir(title) for each in res.xpath('//div[@id="2"]/ul/li'): # 獲取集數 num = each.xpath('./text()').get().split("$")[0] # 獲取每一集對應的鏈接 m3u8 = each.xpath('./input/@value').get() dic_url[m3u8] = num def down_movie(k,v): print("正在下載:",end="") print(k,v) name = os.path.join(title, v +".mp4") FFmpeg(inputs={k:None}, outputs={name:'-loglevel quiet'}).run() if __name__ == "__main__": # 開啟執行緒池 pl = pool(max_workers=8) pl.map(down_movie,dic_url.keys(),dic_url.values()) pl.shutdown()
因為沒有做優化,所以在輸入名字的時候盡量詳細點:

搞定:

可以看到,確實是在同時下載,趁這個時間可以出去活動一下,回來應該就下載完了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/238340.html
標籤:Python
上一篇:python 裝飾器
