python爬虫之防盗链处理

B站视频教程

基本用法

headers = {
    'referer': referer_url
}

梨视频视频下载

在视频播放网页打开播放的请求发现请求头中有referer防盗链

请求头

如果我们直接发起请求会返回以下错误结果:

结果

所以需要在headers中设置referer

完整代码



import random
import time
import requests
from fake_useragent import UserAgent


def get_rel_link(cont_id: str):

    url = 'https://www.pearvideo.com/videoStatus.jsp'

    param = {
        'contId': cont_id,
        'mrd': round(random.random(), 16)
    }

    headers = {
        'user-agent': UserAgent().random,
        'referer': 'https://www.pearvideo.com/video_' + cont_id
    }
    res = requests.get(url=url, headers=headers, params=param)
    vedio_info = res.json().get('videoInfo')

    # 真视频地址 'https://video.pearvideo.com/mp4/adshort/20220111/cont-1749725-15815507_adpkg-ad_hd.mp4'
    # 伪视频地址 'https://video.pearvideo.com/mp4/adshort/20220111/1645089594693-15815507_adpkg-ad_hd.mp4'
    faka_vedio_url = vedio_info.get('videos').get('srcUrl')

    # 分割
    temp1 = faka_vedio_url.split('-', 1)
    # 前部分翻转
    temp2 = ''.join(reversed(temp1[0]))
    # 翻转后以'/'切割再翻转回来找到假id
    fake_cont_id = ''.join(reversed(temp2.split('/', 1)[0]))

    rel_vedio_url = faka_vedio_url.replace(fake_cont_id, 'cont-'+cont_id)

    print('视频地址:', rel_vedio_url)

    return rel_vedio_url


def download_vedio(cont_id: str, rel_vedio_url: str):
    page_content = requests.get(rel_vedio_url).content
    with open('视频{}.mp4'.format(cont_id), 'wb') as fp:
        fp.write(page_content)


if __name__ == '__main__':
    cont_id = input('输入视频网址链接:\n').split('_')[1]
    start_time = time.time()
    rel_vedio_url = get_rel_link(cont_id=cont_id)
    download_vedio(cont_id, rel_vedio_url)
    end_time = time.time()
    print("视频下载完成,总耗时:{} s".format(end_time-start_time))

运行实例

梨视频下载

最后修改:2022 年 02 月 17 日
如果觉得我的文章对你有用,请随意赞赏