Python使用Requests和BS4实现蓝奏云直链解析与下载

在很多时候,都会使用到程序自主更新功能,那么今天我们就用蓝奏云实现一个Python程序的自主更新(当然,今天只是完成请求蓝奏云的直链地址)

思路解析

我们可以首先申请一个蓝奏云的账号,在这里就不过多地阐述,在这里了,我们可以使用我这里的一个网址来进行解析 cookies地址

我们可以看到这一个主页面

我们要获取的就是这个红色bottom的链接地址
我们可以打开开发者模式,便可以看到这个iframe标签
在这里插入图片描述

它把我们指引到另外一个链接地址
在这里插入图片描述

这里便是这一个红色bottom的真实位置
当我们惦记这个主要界面时,只能看到这个超时的显示,无法看见其他的内容,我们便可以知道它是通过后台加载或接口来的到数据的
在这里插入图片描述

我们可以继续往下查找,最终在ajaxm.php中找到了地址
在这里插入图片描述

请求这个 地址(已失效),我们便可以看到下载成功
在这里插入图片描述

那么我们看一下是怎么请求获取数据的,然后我们要模拟这个请求再次获取数据
在这里插入图片描述

我们可以看出它是用表单提交的,action和sign和vis就是表单的参数,我们只要把这个表单发送到这个php网站,就可以获取蓝奏云直链了

代码实现

#coding=utf-8
from bs4 import BeautifulSoup
import requests
import re
import time
import json

def GetHeaders(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
        'referer': url,#蓝奏云分享文件链接地址
        'Accept-Language': 'zh-CN,zh;q=0.9',
    }
    return headers

def GetRealAddress(url):
    # 获取分享页面html文件
    res = session.get(url,headers=GetHeaders(url))
    # 引入BeautifulSoup库对html进行处理,获取iframe中的出现的js文件
    soup = BeautifulSoup(res.text,'html.parser')
    url2 = 'https://www.lanzous.com/'+soup.find('iframe')['src']
    #print(url2)
    res2 = session.get(url2,headers=GetHeaders(url2))

    # 正则提取请求三个参数

    a = re.findall(r'var a = \'([\w]+?)\';',res2.text)
    params = re.findall(r'var [\w]{6} = \'([\w]+?)\';',res2.text)
    #print(params)

    # 请求下载地址
    url3 = 'https://www.lanzous.com/ajaxm.php'
    data = {
        'action':'downprocess',
        'sign':params[1],
        'ves':1,
    }
    res3 = session.post(url3,headers=GetHeaders(url2),data=data)
    res3 = json.loads(res3.content)


    # 请求最终重定向地址
    try:
        url4 = res3['dom']+'/file/'+res3['url']
    except:
        while True:
            res3 = session.post(url3,headers=GetHeaders(url2),data=data)
            res3 = json.loads(res3.content)
            a = res3.get("inf")
            #print(res3)
            if a == "已超时,请刷新":
                print("正在为您尝试第二次爬取,请稍后...")
            else:
                break
    else:
        pass
    print(url4)
    headers2 = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    }
    res4 = session.head(url4, headers=headers2)
    file_address = res4.headers['Location']

    return file_address

if __name__ == '__main__':
    session = requests.session()
    address = GetRealAddress("https://fightmountain.lanzous.com/ixtAme2m0kd")
    r = requests.get(address) 
    with open("cookies.txt",'wb') as f:
        f.write(r.content)

在这里呢,我们主要使用session实现会话保持,然后使用post方法来获取数据,最后请求数据,获取最终的直链

参考文档

Python爬取蓝奏云直链(获取真实文件地址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地摊主老袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值