技术分享

蓝奏云真实地址解析(修复版)python

路人乙 · 3月20日 · 2021年 484次已读

2021-3-20 17:16:48 添加了signs的获取、修复了sign获取的正则表达式、注释掉了最后一次get,直接通过返回的json合成下载直链

源码原地址:https://www.ilt.me/dmfx/130.html

今日使用的时候发现大佬写的解析源码已经过时了,不再适用于现在(2021)的蓝奏云了,故花了点时间将代码进行了修复更新,本次修改并未得到原作者同意

直接上代码

import requests
import re
import json
from bs4 import BeautifulSoup
def lanzou_download(url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36 Edg/79.0.309.51',
        'origin': 'https://www.lanzous.com'
        }
    # 请求下载页面
    strhtml = requests.get(url, headers=headers)
    soup = BeautifulSoup(strhtml.text,"html.parser")
    # 拿到iframe地址
    data = soup.select('body > div.filter > div.n_box > div.n_file > iframe.n_downlink')
    src = str(data[0]['src'])
    dowhtml = requests.get('https://www.lanzous.com'+src, headers=headers)
    soup = BeautifulSoup(dowhtml.text,"html.parser")
    # 拿到ajax请求脚本
    data = soup.select('body > script')
    # 正则取签名
    data_str = str(data[0])
    regex_signs = re.compile('var ajaxdata = \'(.*?)\';',re.M|re.I)
    regex_sign = re.compile('signs\':ajaxdata,\'sign\':\'(.*?)\',\'ves\':1,\'websign',re.M|re.I)
    signs = re.findall(regex_signs, data_str)
    sign = re.findall(regex_sign, data_str)
    #print(sign[0])
    # 请求ajax获取跳转地址
    dowjsonStr = requests.post('https://www.lanzous.com/ajaxm.php',data={'action':'downprocess','sign':sign[0],'signs':signs[0],'ves':'1'},headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36 Edg/79.0.309.51',
        'referer': 'https://www.lanzous.com' + src,
        })
    dowjson = json.loads(dowjsonStr.text)
    #print(str(dowjsonStr.text))
    downUrl = dowjson['dom'] + '/file/' + dowjson['url']
    # 请求跳转地址获取真实地址
    #oragin = requests.get(dowjson['dom'] + '/file/' + dowjson['url'],allow_redirects=False ,headers={
    #    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
    #    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    #})
    # 拿到302跳转地址
    #downUrl = oragin.next.url
    return downUrl



def main():
    print(lanzou_download('https://wws.lanzous.com/iZOmTn00zud'))





if __name__ == '__main__':
    main()

若转载请注明作者和出处谢谢,源码得之不易,改之亦难,望君珍视。