欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-03-26 19:23:19
美拍链接:https://www.meipai.com/ 找到视频链接的标签,源代码中没有这个div 通过Fiddler抓包,找到class="mp h5 player layer video"的div由哪个js文件生成的 打开对应的js文件,对其进行断点,找到src生成的方式 发现src参数在这个 ......

美拍链接:



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

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

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

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

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

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

发现src参数在这个位置

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

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

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

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

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


在请求网页时,提取出视频对应的字符串,再通过模拟出的方法即可得到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/')



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