python实例,突破反爬,爬取梨视频并下载-泓源视野

python实例,突破反爬,爬取梨视频并下载

#python运行环境python3.9

#目标:爬取梨视频上的视频数据下载到本地
#分析网站:
#       1,数据来源 if ?{动态数据,or 静态数据}? 通过谷歌浏览器的检查判断源代码
#       2,数据抓包分析
#视频排行榜页面列表https://www.pearvideo.com/popular_loading.jsp?reqType=1&categoryId=&start=40&sort=39&mrd=0.3765578053919627(瀑布流加载方式翻页)通过检查network-XHR(popular_longing)
#结果为动态视频 https://www.pearvideo.com/video_1705502 目标视频播放网址
#视频链接存放:https://www.pearvideo.com/videoStatus.jsp?contId=1705502&mrd=0.6076594161036941 (通过network-XHR缓存地址)
#(假)视频播放地址https://video.pearvideo.com/mp4/adshort/20201105/1604657107043-15468144_adpkg-ad_hd.mp4(network-XHR-preview-videoinfo展开数据得到videourl)
#(真)视频播放地址:https://video.pearvideo.com/mp4/adshort/20201105/cont-1705502-15468144_adpkg-ad_hd.mp4(通过目标源代码Elements右键播放处选择检查源代码得到)
#流程:
#   1,url
#   2,发送请求,接受响应
#   3,解析网页
#   4,保存数据

import re
import requests

def get_url(video_id):
    url = 'https://www.pearvideo.com/videoStatus.jsp?contId={}&mrd=0.6076594161036941'.format(video_id)
    headers = {
        #防盗链,确定来路
        'Referer': 'https://www.pearvideo.com/video_{}'.format(video_id),
        #用户代理 确定用户信息
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
    }
    response = requests.get(url,headers=headers)
    # print(response.text)
    html_data = response.json()
    video_url = html_data['videoInfo']['videos']['srcUrl']
    # print(video_url)
    #正则表达式用于id 替换真url地址 cont- 构造真的链接地址
    new_url = re.sub(r'\/\d{13}-',f'/cont-{video_id}-',video_url)
    # print(new_url)
    #存放视频地址
    path = r'G:\video\' + video_id + '.mp4' #很重要文件夹路径后面是两个\ 不然后面出现’下面警告波浪线
    resp = requests.get(new_url)
    with open(path,mode='wb') as f:
        f.write(resp.content) #.content用于保存二进制数据

for page in range(0,10,10):
    url = 'https://www.pearvideo.com/popular_loading.jsp'
    params = {
        'reqType': '1',
        'categoryId':'',
        'start':'{}'.format(page),
        'sort' : '1',
        'mrd'  :'0.3765578053919627',
    }
    response = requests.get(url,params=params)
    # print(response.text)
    titles = re.findall('<h2 class="popularem-title">(.*?)</h2>',response.text)
    # print(titles)
    num_id = re.findall('<a href="video_(\d+)" class="popularembd actplay">',response.text)
    # print(num_id)
    # 这里代表第几(0)个视频数(留空则默认上面1-10的视频)
    get_url(num_id[0])

本文由 泓源视野 作者:admin 发表,其版权均为 泓源视野 所有,文章内容系作者个人观点,不代表 泓源视野 对观点赞同或支持。如需转载,请注明文章来源。
2
admin

发表评论

Protected with IP Blacklist CloudIP Blacklist Cloud

您是第8234220位访客, 您的IP是:[162.158.107.116]