python爬虫下载影视网站的电影
- 我这边选取了vip网站
- F12打开调试抓包模式
- 搜索影片的名称, 观察看看给那个url地址发送了请求,
我看到了 这个请求需要携带发送数据 而这个数据就是我们要的影片名字
这样的就话就可以构建第一段代码
class Video():
"""获取电影信息"""
def __init__(self):
self.query = input("请输入你要下的电影或者电视:")
# query = "闪电侠"
self.form_data = {
"wd": self.query
}
self.url = "http://m.6080w.com/index.php?m=vod-search"
self.headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Content-Length": "30",
"Content-Type": "application/x-www-form-urlencoded",
"Cookie": "__cfduid=d9734b9dde8ba7cb1e88c1ea50773d3081604822345; UM_distinctid=175a6dda4fc2f-0593ff933e9314-303464-15f900-175a6dda4fdaac; CFWztgVisitTotal_643_Cookie=8; cck_lasttime=1604903088259; cck_count=2; PHPSESSID=33ctoent9p7gmees4v57evahqr; Hm_lvt_1be9687a89f08192cf85d11531ef7b32=1604886953,1604887736,1604907659,1604908160; CNZZDATA1276411901=1025499974-1604819080-null%7C1604932558; mac_history=%7Bvideo%3A%5B%7B%22name%22%3A%22%u7784%u51C6%22%2C%22link%22%3A%22/Movie/234395.html%22%2C%22typename%22%3A%22%u79D1%u5E7B%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-07-24/159558122926.jpg%22%7D%2C%7B%22name%22%3A%22%u6CA1%u5927%u6CA1%u5C0F%22%2C%22link%22%3A%22/Movie/9415.html%22%2C%22typename%22%3A%22%u559C%u5267%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22tu.php%3Ftu%3Dr1.ykimg.com/05160000513555459792737957002CAE%22%7D%2C%7B%22name%22%3A%22%u884C%u5C38%u4E4B%u60E7%u7B2C%u516D%u5B63%22%2C%22link%22%3A%22/Movie/241403.html%22%2C%22typename%22%3A%22%u6B27%u7F8E%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-10-12/160243920319.jpg%22%7D%2C%7B%22name%22%3A%22%u6B66%u795E%u4E3B%u5BB0%22%2C%22link%22%3A%22/Movie/220270.html%22%2C%22typename%22%3A%22%u52A8%u6F2B%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-03-08/15836400263.jpg%22%7D%2C%7B%22name%22%3A%22%u7535%u51FB%u5C0F%u5B503%u4E4B%u56DB%u5723%u56E2%22%2C%22link%22%3A%22/Movie/199684.html%22%2C%22typename%22%3A%22%u52A8%u6F2B%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-08-03/156477877615.jpg%22%7D%2C%7B%22name%22%3A%22%u9B3C%u5439%u706F%u4E4B%u9F99%u5CAD%u8FF7%u7A9F%22%2C%22link%22%3A%22/Movie/222460.html%22%2C%22typename%22%3A%22%u5267%u60C5%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-04-03/158590081711.jpg%22%7D%2C%7B%22name%22%3A%22%u91CD%u88C5%u673A%u7532%22%2C%22link%22%3A%22/Movie/243395.html%22%2C%22typename%22%3A%22%u52A8%u4F5C%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-11-08/16048116123.jpg%22%7D%2C%7B%22name%22%3A%22%u751F%u751F%u4E16%u4E16%22%2C%22link%22%3A%22/Movie/228446.html%22%2C%22typename%22%3A%22%u6E2F%u53F0%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-06-11/159185161516.jpg%22%7D%2C%7B%22name%22%3A%22%u4E24%u5929%u4E00%u591C%u7B2C%u56DB%u5B63%22%2C%22link%22%3A%22/Movie/213564.html%22%2C%22typename%22%3A%22%u7EFC%u827A%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-12-10/157590726511.jpg%22%7D%2C%7B%22name%22%3A%22%u641C%u7D22%5B2020%5D%22%2C%22link%22%3A%22/Movie/241908.html%22%2C%22typename%22%3A%22%u65E5%u97E9%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-10-18/160299720137.jpg%22%7D%2C%7B%22name%22%3A%22%u9752%u7C2A%u9501%u4E09%u5343%22%2C%22link%22%3A%22/Movie/243447.html%22%2C%22typename%22%3A%22%u5267%u60C5%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-11-09/16048836021.jpg%22%7D%2C%7B%22name%22%3A%22%u6211%u5BB6%u7684%u718A%u5B69%u5B50%22%2C%22link%22%3A%22/Movie/91863.html%22%2C%22typename%22%3A%22%u7EFC%u827A%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-06-22/156119406926.jpg%22%7D%5D%7D; cf_clearance=56e9fbefec1664c5ebc36ffdb29e75cff9845d67-1604937518-0-1zc9693d2bz50e9279eza2074e5-150; Hm_lpvt_1be9687a89f08192cf85d11531ef7b32=1604937549",
"Host": "m.6080w.com",
"Origin": "http://m.6080w.com",
"Referer": "http://m.6080w.com/",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
}
response = requests.post(url=url, data=self.form_data ,headers=headers)
return response.content.decode()
思路: 获取所需视频的信息> 获取所需视频的视频页数 > 获取所需视频的视频地址
- 获取简介里面的ur地址 再手动添加http加域名
5.接下来利用xpath来提取url
5.接下来到了视频的主界面了, 视频的加载均为动态的视频地址 每一个地址都是一小段视频
分析 找到了结尾的文件名
发现是一个文件存着所有信息
下面就可以构建url进行所有片段视频的下载, 再用视频拼接软件进行片段视频代码的拼接。
下面直接上源码:
我定义了5个模块它们都是相互依赖
def_main.py
from 电影大全 import void
from 电影大全 import program_api
class Movie_House():
def run(self):
# 打印帮助文档
api = program_api.help_api()
api.help()
#实现程序
movie = void.Down_video()
movie.Run()
def main():
m = Movie_House()
m.run()
if __name__ == '__main__':
main()
down_video.py
import re
import requests
import os
from lxml import etree
import sys,time
from tqdm import tqdm
class Down():
def __init__(self, video_name):
self.video_name = video_name
self.url = "//www.6080w.com/prestrain.htmlhttps://zuidajiexi.net/m3u8.html?url=https://douban.donghongzuida.com/20201108/12160_6b904f04/index.m3u8"
# self.url = input("请输入视频网址:")
print("具体格式:")
print("//www.6080w.com/prestrain.htmlhttps://zuidajiexi.net/m3u8.html?url=https://douban.donghongzuida.com/20201108/12160_6b904f04/index.m3u8")
self.url2 = self.url.split("="[-1])[-1].split("index")[0] + "1000k/hls/index.m3u8"
self.url21 = self.url.split("="[-1])[-1].split("index")[0] + "1000k/hls/"
# print(url2)
# print(url21)
self.headers3 = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
}
def get_respones(self, url, headers):
ret = requests.get(url=url, headers=headers)
return ret.content.decode()
def D_file(self):
path = str(self.video_name)
if not os.path.exists(path):
os.mkdir(path)
print("文件创建成功")
def run(self):
response = self.get_respones(self.url2, self.headers3)
# print(response)
res = re.findall(r'.*?ts', response)
# print(res)
num = 0
print("视频开始下载请稍后......")
start_time = time.time()
for rets in tqdm(res, ncols=50):
time.sleep(0.05)
t = str(rets).strip()
urls = self.url21 + t
# print(urls, end=" ")
response = requests.get(url=urls, headers=self.headers3)
data = response.content
# print(data)
self.D_file()
file_name = "./" + self.video_name + "//第{}段视频.mp4".format(num)
with open(file_name, 'wb') as f:
f.write(data)
print("第{}段视频保存成功".format(num))
num += 1
end_time = time.time()
print("恭喜你视频下载成功! 你花费了{}时间".format((end_time-start_time)))
program_api.py
class help_api():
def help(self):
print(
"1、运行def_main.py文件将程序运行\n"
"2、按照提示录入数据\n"
"3、直到提示出现: 请点击页面地址复制url视频接口\n"
"4、点击出现的链接 (最好使用chrome(谷歌浏览器))按F12 进入网页调试工具\n"
"5、点击Elements页面 按住Ctrl+F 进入元素查找 然后将控制台的xpath内容填写进去\n"
"6、复制里面的url链接 填写到url视频接口中\n"
"7、下载视频合成工具(推荐使用格式工厂)"
"8、将创建保存的文件夹下的所有片段视频进行合并"
)
video_api.py
import requests
from lxml import etree
class Video():
"""获取电影信息"""
def __init__(self):
self.query = input("请输入你要下的电影或者电视:")
# query = "闪电侠"
self.form_data = {
"wd": self.query
}
self.url = "http://m.6080w.com/index.php?m=vod-search"
self.headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Content-Length": "30",
"Content-Type": "application/x-www-form-urlencoded",
"Cookie": "__cfduid=d9734b9dde8ba7cb1e88c1ea50773d3081604822345; UM_distinctid=175a6dda4fc2f-0593ff933e9314-303464-15f900-175a6dda4fdaac; CFWztgVisitTotal_643_Cookie=8; cck_lasttime=1604903088259; cck_count=2; PHPSESSID=33ctoent9p7gmees4v57evahqr; Hm_lvt_1be9687a89f08192cf85d11531ef7b32=1604886953,1604887736,1604907659,1604908160; CNZZDATA1276411901=1025499974-1604819080-null%7C1604932558; mac_history=%7Bvideo%3A%5B%7B%22name%22%3A%22%u7784%u51C6%22%2C%22link%22%3A%22/Movie/234395.html%22%2C%22typename%22%3A%22%u79D1%u5E7B%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-07-24/159558122926.jpg%22%7D%2C%7B%22name%22%3A%22%u6CA1%u5927%u6CA1%u5C0F%22%2C%22link%22%3A%22/Movie/9415.html%22%2C%22typename%22%3A%22%u559C%u5267%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22tu.php%3Ftu%3Dr1.ykimg.com/05160000513555459792737957002CAE%22%7D%2C%7B%22name%22%3A%22%u884C%u5C38%u4E4B%u60E7%u7B2C%u516D%u5B63%22%2C%22link%22%3A%22/Movie/241403.html%22%2C%22typename%22%3A%22%u6B27%u7F8E%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-10-12/160243920319.jpg%22%7D%2C%7B%22name%22%3A%22%u6B66%u795E%u4E3B%u5BB0%22%2C%22link%22%3A%22/Movie/220270.html%22%2C%22typename%22%3A%22%u52A8%u6F2B%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-03-08/15836400263.jpg%22%7D%2C%7B%22name%22%3A%22%u7535%u51FB%u5C0F%u5B503%u4E4B%u56DB%u5723%u56E2%22%2C%22link%22%3A%22/Movie/199684.html%22%2C%22typename%22%3A%22%u52A8%u6F2B%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-08-03/156477877615.jpg%22%7D%2C%7B%22name%22%3A%22%u9B3C%u5439%u706F%u4E4B%u9F99%u5CAD%u8FF7%u7A9F%22%2C%22link%22%3A%22/Movie/222460.html%22%2C%22typename%22%3A%22%u5267%u60C5%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-04-03/158590081711.jpg%22%7D%2C%7B%22name%22%3A%22%u91CD%u88C5%u673A%u7532%22%2C%22link%22%3A%22/Movie/243395.html%22%2C%22typename%22%3A%22%u52A8%u4F5C%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-11-08/16048116123.jpg%22%7D%2C%7B%22name%22%3A%22%u751F%u751F%u4E16%u4E16%22%2C%22link%22%3A%22/Movie/228446.html%22%2C%22typename%22%3A%22%u6E2F%u53F0%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-06-11/159185161516.jpg%22%7D%2C%7B%22name%22%3A%22%u4E24%u5929%u4E00%u591C%u7B2C%u56DB%u5B63%22%2C%22link%22%3A%22/Movie/213564.html%22%2C%22typename%22%3A%22%u7EFC%u827A%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-12-10/157590726511.jpg%22%7D%2C%7B%22name%22%3A%22%u641C%u7D22%5B2020%5D%22%2C%22link%22%3A%22/Movie/241908.html%22%2C%22typename%22%3A%22%u65E5%u97E9%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-10-18/160299720137.jpg%22%7D%2C%7B%22name%22%3A%22%u9752%u7C2A%u9501%u4E09%u5343%22%2C%22link%22%3A%22/Movie/243447.html%22%2C%22typename%22%3A%22%u5267%u60C5%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-11-09/16048836021.jpg%22%7D%2C%7B%22name%22%3A%22%u6211%u5BB6%u7684%u718A%u5B69%u5B50%22%2C%22link%22%3A%22/Movie/91863.html%22%2C%22typename%22%3A%22%u7EFC%u827A%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-06-22/156119406926.jpg%22%7D%5D%7D; cf_clearance=56e9fbefec1664c5ebc36ffdb29e75cff9845d67-1604937518-0-1zc9693d2bz50e9279eza2074e5-150; Hm_lpvt_1be9687a89f08192cf85d11531ef7b32=1604937549",
"Host": "m.6080w.com",
"Origin": "http://m.6080w.com",
"Referer": "http://m.6080w.com/",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
}
self.headers2 = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Cookie": "__cfduid=d9734b9dde8ba7cb1e88c1ea50773d3081604822345; UM_distinctid=175a6dda4fc2f-0593ff933e9314-303464-15f900-175a6dda4fdaac; CFWztgVisitTotal_643_Cookie=8; cck_lasttime=1604903088259; cck_count=2; PHPSESSID=33ctoent9p7gmees4v57evahqr; Hm_lvt_1be9687a89f08192cf85d11531ef7b32=1604886953,1604887736,1604907659,1604908160; CNZZDATA1276411901=1025499974-1604819080-null%7C1604932558; mac_history=%7Bvideo%3A%5B%7B%22name%22%3A%22%u7784%u51C6%22%2C%22link%22%3A%22/Movie/234395.html%22%2C%22typename%22%3A%22%u79D1%u5E7B%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-07-24/159558122926.jpg%22%7D%2C%7B%22name%22%3A%22%u6CA1%u5927%u6CA1%u5C0F%22%2C%22link%22%3A%22/Movie/9415.html%22%2C%22typename%22%3A%22%u559C%u5267%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22tu.php%3Ftu%3Dr1.ykimg.com/05160000513555459792737957002CAE%22%7D%2C%7B%22name%22%3A%22%u884C%u5C38%u4E4B%u60E7%u7B2C%u516D%u5B63%22%2C%22link%22%3A%22/Movie/241403.html%22%2C%22typename%22%3A%22%u6B27%u7F8E%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-10-12/160243920319.jpg%22%7D%2C%7B%22name%22%3A%22%u6B66%u795E%u4E3B%u5BB0%22%2C%22link%22%3A%22/Movie/220270.html%22%2C%22typename%22%3A%22%u52A8%u6F2B%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-03-08/15836400263.jpg%22%7D%2C%7B%22name%22%3A%22%u7535%u51FB%u5C0F%u5B503%u4E4B%u56DB%u5723%u56E2%22%2C%22link%22%3A%22/Movie/199684.html%22%2C%22typename%22%3A%22%u52A8%u6F2B%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-08-03/156477877615.jpg%22%7D%2C%7B%22name%22%3A%22%u9B3C%u5439%u706F%u4E4B%u9F99%u5CAD%u8FF7%u7A9F%22%2C%22link%22%3A%22/Movie/222460.html%22%2C%22typename%22%3A%22%u5267%u60C5%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-04-03/158590081711.jpg%22%7D%2C%7B%22name%22%3A%22%u91CD%u88C5%u673A%u7532%22%2C%22link%22%3A%22/Movie/243395.html%22%2C%22typename%22%3A%22%u52A8%u4F5C%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-11-08/16048116123.jpg%22%7D%2C%7B%22name%22%3A%22%u751F%u751F%u4E16%u4E16%22%2C%22link%22%3A%22/Movie/228446.html%22%2C%22typename%22%3A%22%u6E2F%u53F0%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-06-11/159185161516.jpg%22%7D%2C%7B%22name%22%3A%22%u4E24%u5929%u4E00%u591C%u7B2C%u56DB%u5B63%22%2C%22link%22%3A%22/Movie/213564.html%22%2C%22typename%22%3A%22%u7EFC%u827A%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-12-10/157590726511.jpg%22%7D%2C%7B%22name%22%3A%22%u641C%u7D22%5B2020%5D%22%2C%22link%22%3A%22/Movie/241908.html%22%2C%22typename%22%3A%22%u65E5%u97E9%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-10-18/160299720137.jpg%22%7D%2C%7B%22name%22%3A%22%u9752%u7C2A%u9501%u4E09%u5343%22%2C%22link%22%3A%22/Movie/243447.html%22%2C%22typename%22%3A%22%u5267%u60C5%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-11-09/16048836021.jpg%22%7D%2C%7B%22name%22%3A%22%u6211%u5BB6%u7684%u718A%u5B69%u5B50%22%2C%22link%22%3A%22/Movie/91863.html%22%2C%22typename%22%3A%22%u7EFC%u827A%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2019-06-22/156119406926.jpg%22%7D%5D%7D; cf_clearance=56e9fbefec1664c5ebc36ffdb29e75cff9845d67-1604937518-0-1zc9693d2bz50e9279eza2074e5-150; Hm_lpvt_1be9687a89f08192cf85d11531ef7b32=1604937754",
"Host": "m.6080w.com",
"Referer": "http://m.6080w.com/index.php?m=vod-search",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
}
self.headers3 = {
"Cookie": "__cfduid=d9734b9dde8ba7cb1e88c1ea50773d3081604822345; UM_distinctid=175a6dda4fc2f-0593ff933e9314-303464-15f900-175a6dda4fdaac; CFWztgFirstShowTime_643_Cookie=2020-11-8%2023%3A9%3A48; CFWztgVisitTotal_643_Cookie=7; cck_count=1; cck_lasttime=1604858787429; mac_history=%7Bvideo%3A%5B%7B%22name%22%3A%22%u95EA%u7535%u4FA0%u7B2C%u4E94%u5B63%22%2C%22link%22%3A%22/Movie/139107.html%22%2C%22typename%22%3A%22%u6B27%u7F8E%u5267%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2018-11-28/154340757520.jpg%22%7D%2C%7B%22name%22%3A%22%u91CD%u88C5%u673A%u7532%22%2C%22link%22%3A%22/Movie/243410.html%22%2C%22typename%22%3A%22%u79D1%u5E7B%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-11-08/160482961924.jpg%22%7D%2C%7B%22name%22%3A%22%u6F2B%u5A01%u82F1%u96C4%uFF1A%u795E%u5947%u641E%u7B11%22%2C%22link%22%3A%22/Movie/233192.html%22%2C%22typename%22%3A%22%u52A8%u6F2B%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-07-13/159462720510.jpg%22%7D%2C%7B%22name%22%3A%22%u9B3C%u5439%u706F%u4E4B%u9F99%u5CAD%u8FF7%u7A9F%22%2C%22link%22%3A%22/Movie/222460.html%22%2C%22typename%22%3A%22%u5267%u60C5%u7247%22%2C%22typelink%22%3A%22/vodlist/-1.html%22%2C%22pic%22%3A%22upload/vod/2020-04-03/158590081711.jpg%22%7D%5D%7D; CNZZDATA1276411901=1025499974-1604819080-null%7C1604862301; cf_clearance=2326376d4521dcf683859b555eca275817ed2fef-1604863264-0-1zc9693d2bz50e9279eza2074e5-150; Hm_lvt_1be9687a89f08192cf85d11531ef7b32=1604863389,1604863667,1604863812,1604863960; PHPSESSID=8qrr0ovqf2qt86gj70glcphvm1; Hm_lpvt_1be9687a89f08192cf85d11531ef7b32=1604864668",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36"
}
def Get_Response(self, url, headers, code=True):
"""发送请求获取响应"""
if code:
response = requests.post(url=url, data=self.form_data ,headers=headers)
return response.content.decode()
else:
response = requests.get(url=url, data=self.form_data, headers=headers)
return response.content.decode()
def Wash_Html_Data(self, srt_html):
"""清洗数据"""
html = etree.HTML(srt_html)
# 对页面进行分组
# div = html.xpath("//div[@class='container']/div[@class='row']/div/div/div")
div = html.xpath("//div[@class='container']/div[@class='row']/div/div/div")
self.video_list = []
self.url_list = []
self.video_url = []
for div_tmp in div:
div_dict = {}
# 提取电影名称
div_dict['video_name'] = div_tmp.xpath("./div/dl/dd/div[@class='head']/h3/text()")
div_dict['video_name'] = div_dict['video_name'][0] if len(div_dict['video_name']) > 0 else None
# 提取封面里的详细的地址
video_url = div_tmp.xpath("./div/dl/dt/a/@href")
video_url = "http://m.6080w.com/" + video_url[0] if len(video_url) > 0 else None
self.video_url.append(video_url)
div_dict['video_url'] = div_tmp.xpath("./div/dl/dt/a/@href")
div_dict['video_url'] = "http://m.6080w.com/" + div_dict['video_url'][0] if len(div_dict['video_url']) > 0 else None
# 提取电影封面地址
div_dict['video_img_url'] = div_tmp.xpath("./div/dl/dt/a/@style")
div_dict['video_img_url'] = div_dict['video_img_url'][0].split("(")[-1].split(")")[0] if len(div_dict['video_img_url']) > 0 else None
# 提取电影评分
div_dict['video_score'] = div_tmp.xpath("./div/dl/dd/div/span/text()")
div_dict['video_score'] = div_dict['video_score'][0] if len(div_dict['video_score']) > 0 else None
# 提取电影主演
div_dict['video_header'] = div_tmp.xpath("./div/dl/dd/ul/li/text()")
div_dict['video_header'] = div_dict['video_header'][0] if len(div_dict['video_header']) > 0 else None
# 提取电影导演
# 提取电影地区
# 提取电影类型
# 提取电影语言
# 提取电影年份
self.video_list.append(div_dict)
# 提取下一页的 url地址
# http://m.6080w.com/
next = html.xpath("/html/body/div[1]/div/div[1]/div/div[22]/a[2]/@href")
nex_url = "http://m.6080w.com/" + next[0] if len(next) > 0 else None
self.url_list.append(nex_url)
# print(url_list)
return self.video_list, self.url_list, self.video_url
def Print_Data(self, video_list):
"""打印可视视频数据"""
num = 1
for data in video_list:
print()
print("第{}部:".format(num))
print("电影名称:{}\n详细地址:{}\n电影封面地址:{}\n电影评分:{}\n电影主演:{}".format(data['video_name'], data['video_url'],data['video_img_url'], data['video_score'], data['video_header']))
print("#"*50)
print()
num += 1
void.py
from 电影大全 import video_api
from lxml import etree
import re
from 电影大全 import down_video
class Down_video(video_api.Video):
def url_video(self, url):
for tmp in url:
self.video_in_urls.append(tmp)
def wash_html(self, str_html):
"""清洗数据"""
html = etree.HTML(str_html)
html_div = html.xpath("//div[@id='playlist1']/ul/li") # 分组
video_name_list = []
video_name = {}
dict_list = []
for div in html_div:
div_dict = {}
# 获取页码数
div_dict['video_code_number'] = div.xpath("./a/text()")
div_dict['video_code_number'] = div_dict['video_code_number'][0] if len(div_dict['video_code_number']) > 0 else None
# 获取对应的url地址
div_dict['video_url'] = div.xpath("./a/@href")
div_dict['video_url'] = "http://m.6080w.com/" + div_dict['video_url'][0] if len(div_dict) > 0 else None
dict_list.append(div_dict)
# 获取片名
video_name['video_name'] = html.xpath("//div[@class='hy-video-details clearfix']/div/dl/dd/div/h3/text()")
video_name['video_name'] = video_name['video_name'][0] if len(video_name['video_name']) > 0 else None
# 获取片名信息
video_name['video_data'] = html.xpath("//div[@class='hy-video-details clearfix']/div/dl/dd/ul/li/text()")
video_name['video_data'] = video_name['video_data'][0] if len(video_name['video_data']) > 0 else None
video_name_list.append(video_name)
return dict_list, video_name_list
def inedx_html(self, str_html):
print(str_html)
html = etree.HTML(str_html)
# 获取ts
play_url = html.xpath("//div[@class='container']/div/div/div/div/div/table/tbody/tr/td/iframe/@src")
print(play_url)
# https://youku.cdn3-okzy.com/20191209/4820_5020c357/1000k/hls/index.m3u8
play_url = play_url.split("="[-1])[-1].split("index")[0] + "1000k/hls/index.m3u8"
video_url = play_url.split("="[-1])[-1].split("index")[0] + "1000k/hls/"
response = self.Get_Response(url=play_url, headers=self.headers3, code=False)
res = re.findall(r'c.*?ts', response)
for ts in res:
url = video_url+ts
print(url)
def print_wash_data(self, wash_dict_list, wash_video_name_list):
"""打印清洗数据"""
url = []
for data in wash_dict_list:
print()
print("片名:{}\n片名信息:{}\n集数:{}\n链接:{}".format(wash_video_name_list[0]['video_name'],wash_video_name_list[0]['video_data'] ,data['video_code_number'], data['video_url']))
# print("url=====", data['video_url'])
url.append(data['video_url'])
print("#" * 50)
print()
page = int(input("请输入你要下载的视频的集数:"))
url.reverse()
urls = url[page-1]
print("请点击页面地址复制url视频接口")
print("本集/本电影的url地址如下\n:{}".format(urls))
print("xpath://div[@class='container']/div/div/div/div/div/table/tbody/tr/td/iframe/@src")
down = down_video.Down(self.query)
down.run()
def content(self, url):
"""获取url发送请求获取响应"""
str_html = self.Get_Response(url=url, headers=self.headers2)
wash_dict_list, wash_video_name_list = self.wash_html(str_html)
self.print_wash_data(wash_dict_list=wash_dict_list, wash_video_name_list=wash_video_name_list)
def Run(self):
url = self.url
print("正在爬取视频数据, 请稍候...")
self.video_in_urls = []
while url != None:
# get response
str_html = self.Get_Response(url=url, headers=self.headers)
# print(str_html)
video_lists, next_video_url, video_urls = self.Wash_Html_Data(str_html)
# print(next_video_url)
self.url_video(url=video_urls)
# 打印视频数据
self.Print_Data(video_list=video_lists)
num = 0
url = next_video_url[num]
num += 1
mv = int(input("请选择你要下载的影片:"))
url = self.video_in_urls[mv-1]
self.content(url=url)
提取成功:
合并成功:
播放成功: