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

三木猿 16天前 20

新一期教学开始啦,本人也是初学,记录下爬取电影的方式,这个比较复杂了,网上的教学也比较少,希望能火吧我这里以独播库为例进行爬取
1.首先需要知道,很多的电影网站会用采用m3u8视频分段的方式来加载视频,可不是咱想象中的一整个文件,分段加载的好处就是加载快,这里说到m3u8这其实是个文件,请看截图:

打开f12可以看到有两个m3u8结尾的链接,如果打开这个链接会下载m3u8文件,这里我们来下载看看这个文件的内容

很明显这个不是真正的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 osimport requestsimport refrom Crypto.Cipher import AESfrom 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]+lineif __name__ == '__main__':    download(get_m3u8("https://cn.duboku.tv/vodplay/1354-1-4.html"))

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

    所以盗版网站就很好爬
  • Albert666 16天前
    引用 5
    这里是因为这个网站key都直接在了  有些网站是没有这么明显的key在的吧。很多都是加密的 连m3u8文件都加密
  • witchou 16天前
    引用 6
    来看看 学习一下
  • 行云丶尘伤 16天前
    引用 7
    嗯,, 看来还得研究一下python环境····
  • mysshi 16天前
    引用 8
    不明觉厉
  • 意识的 16天前
    引用 9
    python还不会,打算学不知道怎么学好,不知道是否好学。
  • sunfly 16天前
    引用 10
    看来派森=爬虫
    大家都用来爬
  • ciker_li 16天前
    引用 11
    学习一下
  • moshouhun 16天前
    引用 12
    学习了,
  • Albert666 16天前
    引用 13
    这里是因为这个网站key都直接在了  有些网站是没有这么明显的key在的吧。很多都是加密的 连m3u8文件都加密
  • 楼主 三木猿 16天前
    引用 14
    Albert666 发表于 2020-9-9 15:45
    这里是因为这个网站key都直接在了  有些网站是没有这么明显的key在的吧。很多都是加密的 连m3u8文件都加密

    所以盗版网站就很好爬
  • kanxue2018 16天前
    引用 15
    多向楼主学习,多实践!
  • adou17 16天前
    引用 16
    学习了    !!!         
  • 就是那个秋 16天前
    引用 17
    学习了,m3u8视频文件寻找下周
  • Albert666 16天前
    引用 18
    三木猿 发表于 2020-9-9 15:48
    所以盗版网站就很好爬

    这些网站是很容易。。
  • 深水夜藏 16天前
    引用 19
    学习了,谢谢分享
  • 游客
    20
返回