python爬虫下载影视网站的电影

python爬虫下载影视网站的电影

  1. 我这边选取了vip网站
  2. F12打开调试抓包模式
  3. 搜索影片的名称, 观察看看给那个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()

思路: 获取所需视频的信息> 获取所需视频的视频页数 > 获取所需视频的视频地址

  1. 获取简介里面的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)

提取成功:
在这里插入图片描述
合并成功:在这里插入图片描述

播放成功:
在这里插入图片描述

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值