获取美拍视频的链接--JS分析

美拍链接:https://www.meipai.com/



找到视频链接的标签,源代码中没有这个div



通过Fiddler抓包,找到class="mp-h5-player-layer-video"的div由哪个js文件生成的



打开对应的js文件,对其进行断点,找到src生成的方式



发现src参数在这个位置



此时需要找到字符串的来源、再模拟出这个方法



最后发现字符串是一开始就存在于网页中的




在请求网页时,提取出视频对应的字符串,再通过模拟出的方法即可得到URL

import threading
import requests
import base64
import re


#   解密video的URL
def Decrypt_video_url(content):
    str_start = content[4:]

    list_temp = []
    list_temp.extend(content[:4])
    list_temp.reverse()
    hex = ''.join(list_temp)

    dec = str(int(hex, 16))
    list_temp1 = []
    list_temp1.extend(dec[:2])
    pre = list_temp1

    list_temp2 = []
    list_temp2.extend(dec[2:])
    tail = list_temp2

    str0 = str_start[:int(pre[0])]
    str1 = str_start[int(pre[0]):int(pre[0]) + int(pre[1])]

    result1 = str0 + str_start[int(pre[0]):].replace(str1, '')

    tail[0] = len(result1) - int(tail[0]) - int(tail[1])

    a = result1[:int(tail[0])]
    b = result1[int(tail[0]):int(tail[0]) + int(tail[1])]
    c = (a + result1[int(tail[0]):].replace(b, ''))

    return base64.b64decode(c).decode()


#   获取网页的内容
def Page_text(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0'
    }
    return requests.get(url, headers=headers).text


#   解析单个网页
def Parse_url(video_title, url_tail):
    page_url = 'https://www.meipai.com' + url_tail
    video_page = Page_text(page_url)
    #   获取视频加密后的的URL
    data_video = re.findall(r'data-video="(.*?)"', video_page, re.S)[0]
    video_url = Decrypt_video_url(data_video)
    print("{}\n{}\n{}\n".format(video_title, page_url, video_url))


def Get_url(url):
    index_page = Page_text(url)
    #   各个视频的标题
    videos_title = re.findall(r'class="content-l-p pa" title="(.*?)">', index_page, re.S)
    #   各个播放网页的URL
    urls = re.findall(r'<div class="layer-black pa"></div>\n\s*<a hidefocus href="(.*?)"', index_page, re.S)

    t_list = []
    for video_title, url_tail in zip(videos_title, urls):
        t = threading.Thread(name='GetUrl', target=Parse_url, args=(video_title, url_tail,))
        t_list.append(t)

    for i in t_list:
        i.start()


if __name__ == '__main__':
    Get_url('https://www.meipai.com/')

posted @ 2019-12-31 15:37  三个零  阅读(1436)  评论(0编辑  收藏  举报