这年代谁还开VIP电影啊,教你用Python爬取最爱的电影并下载到本地
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
小说、图片、小视频都弄了,今天就下载电影或者电视剧吧,目标网站:https://www.okzyw.com/
首先进入搜索页面:https://www.okzyw.com/index.php?m=vod-search
搜索自己喜爱的剧(比如我就喜欢西部世界^ _ ^)
进入Network查看发现是POST请求:
我把数据也截下来了,直接上代码就行:
import requestsimport parsel,osfrom ffmpy3 import FFmpegfrom concurrent.futures import ThreadPoolExecutor as poolheaders
={"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).textres
= parsel.Selector(html)for each in res.xpath("//div[@class="xing_vb"]/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).textres
= parsel.Selector(html)# 获取电影标题做文件夹title = res.xpath("//div[@class="vodh"]/h2/text()").get()
# 创建文件夹
if title notin 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 FFmpegFFmpeg(inputs
={URL:None}, outputs={name:None).run()
不过在此之前需要下载一个文件,解压后将FFmpeg.exe放在py文件目录下,我已经放在网盘了,需要的朋友可以自行下载,这个是64位的,下载链接:在底部
因为每一集都有几百M,所以开8个线程:
import requestsimport parsel,osfrom ffmpy3 import FFmpegfrom concurrent.futures import ThreadPoolExecutor as poolheaders
={"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[@class="xing_vb"]/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[@class="vodh"]/h2/text()").get()
# 创建文件夹
if title notin 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()
因为没有做优化,所以在输入名字的时候尽量详细点:
搞定:
可以看到,确实是在同时下载,趁这个时间可以出去活动一下,回来应该就下载完了。
以上是 这年代谁还开VIP电影啊,教你用Python爬取最爱的电影并下载到本地 的全部内容, 来源链接: utcz.com/z/537849.html