其他分享
首页 > 其他分享> > 爬虫(5)-防盗链之梨视频

爬虫(5)-防盗链之梨视频

作者:互联网

# -*- coding: utf-8 -*-
"""
@Time    :  2022/3/21 17:02
@Author  : Andrew
@File    : 防盗链.py
"""
# 页面源代码运行后,在数据的加持下,才是实时的f12所看到的样子
# 1通过对比视频播放地址,实际的地址https://www.pearvideo.com/video_1755641
# 2动态页面的地址是https://video.pearvideo.com/mp4/adshort/20220319/cont-1755641-15846744_adpkg-ad_hd.mp4
# 3而在预览页,https://video.pearvideo.com/mp4/adshort/20220319/1647854201574-15846744_adpkg-ad_hd.mp4
# 发现3与实际的不一样,https://video.pearvideo.com/mp4/adshort/20220319/和-15846744_adpkg-ad_hd.mp4是相同的
# 不一样的地方在video_1755641与1647854201574,而1647854201574是预览页的system Time

# 站在爬虫的角度是拿源代码去解析实际的播放地址,也就是2,但是由于梨视频的网站属于二次加载
# ,所以在源代码中并没有发现该视频的地址,实际上我们只能手动用来参照,也就是我们需要通过1、3去拼凑

# 防盗链:Referer: https://www.pearvideo.com/video_1755641
"""
    1.{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1647855533877'}单纯的requests.get(url)
        -考虑是否被反扒,加上headers
        -在requesturl那里发现了referer,这个就是防盗链,意思是,人家网页之间的转换是有顺序的,一串串的挨着,如果当前页面的地址的上一级的链接是谁的话,就说明有人在偷资源,就会显示上面的信息
            所以就在headers里面的加上一个防盗链,因为是从视频地址url这里进行请求获取的requesturl
            Referer: https://www.pearvideo.com/video_1755641(视频地址)
"""

import requests

# 打开视频页,拉取视频地址
url = "https://www.pearvideo.com/video_1755641"
cont_id = url.split("_")[-1]
# 在检查网页开发工具中找到requestURl
requestUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={cont_id}&mrd=0.17407634348368117"
# 拿到videoStatus返回的json -》拿到srcURL
# 处理反扒加headers
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 "
                  "Safari/537.36 Core/1.77.97.400 QQBrowser/10.9.4621.400 ",
    # 防盗链  -溯源 当前请求的上一级是谁
    "Referer": url
}
resp = requests.get(requestUrl, headers=headers)
result = resp.json()
print(resp.json())
# srcURL中的内容修改,然后下载
srcUrl = result["videoInfo"]["videos"]["srcUrl"]
systemTime = result["systemTime"]

# https://video.pearvideo.com/mp4/adshort/20220319/1647856405404-15846744_adpkg-ad_hd.mp4
# https://video.pearvideo.com/mp4/adshort/20220319/cont-1755641-15846744_adpkg-ad_hd.mp4
srcUrl = srcUrl.replace(systemTime, f"cont-{cont_id}")
# 下载
with open('a.mp4',mode="wb") as f:
    f.write(requests.get(srcUrl).content)
resp.close()

 

标签:pearvideo,1755641,之梨,爬虫,mp4,video,https,com,防盗链
来源: https://www.cnblogs.com/qiao-16/p/16036102.html