吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4021|回复: 16
收起左侧

[Python 转载] 零基础教学之爬取电影的简单分析和实现(附带python代码)

  [复制链接]
三木猿 发表于 2020-9-9 14:44
新一期教学开始啦,本人也是初学,记录下爬取电影的方式,这个比较复杂了,网上的教学也比较少,希望能火吧我这里以独播库为例进行爬取
1.首先需要知道,很多的电影网站会用采用m3u8视频分段的方式来加载视频,可不是咱想象中的一整个文件,分段加载的好处就是加载快,这里说到m3u8这其实是个文件,请看截图:
image.png
打开f12可以看到有两个m3u8结尾的链接,如果打开这个链接会下载m3u8文件,这里我们来下载看看这个文件的内容
image.png
很明显这个不是真正的m3u8文件,
但是里面有一条地址这个才是真正的文件地址,我们根据地址打开真实文件(这里需要拼接下,真实地址为“https://tv.wedubo.com/20191213/ny37lszg/hls/index.m3u8”),这是我们看到他的真面目
[Asm] 纯文本查看 复制代码
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://v.zdubo.com/20191213/ny37lszg/hls/key.key"
#EXTINF:10.023,
https://v.wedubo.com/20191213/ny37lszg/hls/DMTmLuLL.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/sFnwy1KT.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/sjv8BH0a.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/pOGumGn6.ts
#EXTINF:10,
https://v.zdubo.com/20191213/ny37lszg/hls/ZvyDb1nx.ts
#EXTINF:10,
https://v.tudu.site/20191213/ny37lszg/hls/Ytu2PDrQ.ts
#EXTINF:10,
https://v.fanstui.com/20191213/ny37lszg/hls/jIV5lYW3.ts
#EXTINF:10,
https://v.duboku.io/20191213/ny37lszg/hls/tlb5IswY.ts
#EXTINF:10,
https://v.wedubo.com/20191213/ny37lszg/hls/qWDCDR6W.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/QJ365WPc.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/xHuE5DwP.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/Ao69Rdce.ts
#EXTINF:10,
https://v.zdubo.com/20191213/ny37lszg/hls/elqV91Wh.ts
#EXTINF:10,
https://v.tudu.site/20191213/ny37lszg/hls/tBU2DHAb.ts
#EXTINF:10,
https://v.fanstui.com/20191213/ny37lszg/hls/MjTovgaj.ts
#EXTINF:10,
https://v.duboku.io/20191213/ny37lszg/hls/PXcYDT9l.ts
#EXTINF:10,
https://v.wedubo.com/20191213/ny37lszg/hls/2xVEUnJx.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/HpeWZMXW.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/m0j0Tdmk.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/Hq5FQbGK.ts
#EXTINF:10,
https://v.zdubo.com/20191213/ny37lszg/hls/ZYBQnp5l.ts
#EXTINF:10,
https://v.tudu.site/20191213/ny37lszg/hls/X2lJtbAC.ts
#EXTINF:10,
https://v.fanstui.com/20191213/ny37lszg/hls/CDFnAQK6.ts
#EXTINF:10,
https://v.duboku.io/20191213/ny37lszg/hls/7fON90jQ.ts
#EXTINF:10,
https://v.wedubo.com/20191213/ny37lszg/hls/iIxlTC5t.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/c6Z5IbES.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/tf3axbvS.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/22QVEyQl.ts
#EXTINF:10,
https://v.zdubo.com/20191213/ny37lszg/hls/cNz8ARWQ.ts
#EXTINF:10,
https://v.tudu.site/20191213/ny37lszg/hls/FuACZHkp.ts
#EXTINF:10,
https://v.fanstui.com/20191213/ny37lszg/hls/tUT3mjFz.ts
#EXTINF:10,
https://v.duboku.io/20191213/ny37lszg/hls/hJmjTiXB.ts
#EXTINF:10,
https://v.wedubo.com/20191213/ny37lszg/hls/I0GY05XU.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/2mbe0MV6.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/pwylQ7PB.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/pNNxAodp.ts
#EXTINF:10,
https://v.zdubo.com/20191213/ny37lszg/hls/Wy8x544A.ts
#EXTINF:10,
https://v.tudu.site/20191213/ny37lszg/hls/43jhM1hg.ts
#EXTINF:10,
https://v.fanstui.com/20191213/ny37lszg/hls/R5VkhPDI.ts
#EXTINF:10,
https://v.duboku.io/20191213/ny37lszg/hls/HIOZVw44.ts
#EXTINF:10,
https://v.wedubo.com/20191213/ny37lszg/hls/kkVAYMX1.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/ndRU43WQ.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/c3CoaA3n.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/MSMJIZnY.ts
#EXTINF:10,
https://v.zdubo.com/20191213/ny37lszg/hls/lemaTMuh.ts
#EXTINF:10,
https://v.tudu.site/20191213/ny37lszg/hls/59DkJ7LT.ts
#EXTINF:10,
https://v.fanstui.com/20191213/ny37lszg/hls/1mDH02Pg.ts
#EXTINF:10,
https://v.duboku.io/20191213/ny37lszg/hls/KXThI3yN.ts
#EXTINF:10,
https://v.wedubo.com/20191213/ny37lszg/hls/ZNj9MQFE.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/w24cxqRr.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/Ccf8nqlL.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/ymB41F7s.ts
#EXTINF:10,
https://v.zdubo.com/20191213/ny37lszg/hls/a9elfGcb.ts
#EXTINF:10,
https://v.tudu.site/20191213/ny37lszg/hls/YFDFGIbh.ts
#EXTINF:10,
https://v.fanstui.com/20191213/ny37lszg/hls/ZNIwu9wM.ts
#EXTINF:10,
https://v.duboku.io/20191213/ny37lszg/hls/WokCsZVT.ts
#EXTINF:10,
https://v.wedubo.com/20191213/ny37lszg/hls/ZVMTGHpw.ts
#EXTINF:10,
https://v.dubutv.com/20191213/ny37lszg/hls/IZC6y0AX.ts
#EXTINF:10,
https://v.duboku.tv/20191213/ny37lszg/hls/drcTkcfL.ts
#EXTINF:10,
https://v.dboku.com/20191213/ny37lszg/hls/At68E4Lv.ts
#EXTINF:9.6,
https://v.zdubo.com/20191213/ny37lszg/hls/3VDDxZm8.ts
#EXT-X-ENDLIST

里面有很多的ts结尾的地址,这里的ts其实就是一个个视频,不过都是片段,把这些ts合并后才是真正的我们要的电影
2.然后我们获取到了ts文件地址,所以你以为结束了吗,不,如果你下载了其中一个ts文件你会发现,根本打不开,这是因为视频进行了加密,这时我们注意到在m3u8文件中有这么一句代码
[Asm] 纯文本查看 复制代码
#EXT-X-KEY:METHOD=AES-128,URI="https://v.zdubo.com/20191213/ny37lszg/hls/key.key"

其中的AES-128是加密方式,其中的key是。。。,就是一个key,可以理解为钥匙,我们下载下这个文件
[Asm] 纯文本查看 复制代码
4b56f3209ca9bbef

我们发现里面只有个这玩意,所以我们钥匙有了,锁也有了,到这基本可以去想想代码该怎么实现了
钥匙都给你了,锁也给你了,所以该用钥匙打开锁就要靠你们百度了,这里只讲解怎么用python实现,其他语言咱也么写过

[Asm] 纯文本查看 复制代码
import os
import requests
import re
from Crypto.Cipher import AES
from bs4 import BeautifulSoup


"""
下载M3U8文件里的所有片段
"""


def combine_mp4(path):
    # 合并ts文件
    os.chdir(path)
    shell_str = '+'.join(os.listdir(path))
    shell_str = 'copy /b ' + shell_str + ' ' + '1.mp4'
    os.system(shell_str)
    # 删除ts文件
    os.system('del /Q *.ts')


def download(url):
    # os.getcwd() 获取当前文件路径
    download_path = os.getcwd() + "\download"
    # 不存在文件夹创建
    if not os.path.exists(download_path):
        os.mkdir(download_path)
    all_content = requests.get(url).text # 获取M3U8的文件内容
    # print(all_content)
    file_line = all_content.split("\n") # 读取文件里的每一行
    # 通过判断文件头来确定是否是M3U8文件
    if file_line[0] != "#EXTM3U":
        raise BaseException(u"非M3U8的链接")
    else:
        unknow = True   # 用来判断是否找到了下载的地址
        cryptor = None # 用于AES的解密
        for index, line in enumerate(file_line):
            if "EXT-X-KEY" in line:
                str1 = str(file_line[index])
                url = re.findall('"(.*?)"', str1)
                print(url)
                key = requests.get(str(url[0])).content
                cryptor = AES.new(key, AES.MODE_CBC, key)# key和解密方式,AES我不太熟,请自行百度
            if "EXTINF" in line:
                unknow = False
                pd_url = file_line[index+1]# ts文件的路径
                res = requests.get(pd_url)
                s = str(file_line[index + 1])
                c_fule_name = s[s.rindex("/")+1:]
                print(c_fule_name+'正在下载')
                with open(download_path + "\\" + c_fule_name, 'ab') as f:
                    try:
                        f.write(cryptor.decrypt(res.content))
                        f.flush()
                        f.close()
                    except:
                        continue
                res.close()

        if unknow:
            raise BaseException("未找到对应的下载链接")
        else:
            print("下载完成")
    combine_mp4(download_path)


# 获取页面的m3u8文件地址
def get_m3u8(url):
    res = BeautifulSoup(requests.get(url).content, 'lxml')
    # 获取第九个script标签的内容,地址就在其中
    str1 = str(res.find_all("script")[9])
    # 根据引号分割
    url = re.findall('"(.*?)"', str1)
    # 这里是知道url在第13个,所以就不加循环去判断了,循环多了影响效率
    replace = str(url[13]).replace("/", "").replace("\\", '/')
    # 到这里虽然获取到了m3u8文件,但是不是真正的的文件,这个假的中有真的的存放位置
    text = requests.get(replace).text
    file_line = text.split("\n")  # 读取文件里的每一行
    # url_str为https://v.tudu.site,因为m3u8文件中的地址不全,所以需要拼接下
    url_str = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', replace)
    for line in file_line:
        if 'm3u8' in line:
            return url_str[0]+line


if __name__ == '__main__':
    download(get_m3u8("https://cn.duboku.tv/vodplay/1354-1-4.html"))

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
菩萨的左手 + 1 + 1 用心讨论,共获提升!
Albert666 + 1 + 1 用心讨论,共获提升!
行云丶尘伤 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 三木猿 发表于 2020-9-9 14:47
这里可能是因为网站或者网速的原因,我下载时很慢,大家还是把我的代码当做学习来用吧,实用性不强
 楼主| 三木猿 发表于 2020-9-9 15:07
如果缺AES的话,可以先运行这个
pip install PyCryptodome
 楼主| 三木猿 发表于 2020-9-9 15:48
Albert666 发表于 2020-9-9 15:45
这里是因为这个网站key都直接在了  有些网站是没有这么明显的key在的吧。很多都是加密的 连m3u8文件都加密

所以盗版网站就很好爬
Albert666 发表于 2020-9-9 15:45
这里是因为这个网站key都直接在了  有些网站是没有这么明显的key在的吧。很多都是加密的 连m3u8文件都加密
witchou 发表于 2020-9-9 14:55
来看看 学习一下
行云丶尘伤 发表于 2020-9-9 14:59
嗯,, 看来还得研究一下python环境····
mysshi 发表于 2020-9-9 14:59
不明觉厉
意识的 发表于 2020-9-9 15:18
python还不会,打算学不知道怎么学好,不知道是否好学。
sunfly 发表于 2020-9-9 15:23
看来派森=爬虫
大家都用来爬
ciker_li 发表于 2020-9-9 15:27
学习一下
moshouhun 发表于 2020-9-9 15:35
学习了,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 16:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表