ITPub博客

首页 > 应用开发 > Python > Python爬取动态加载的视频(梨视频,xpath)

Python爬取动态加载的视频(梨视频,xpath)

Python 作者:coutuixixia 时间:2022-03-21 16:06:10 0 删除 编辑

步骤 

1.选择一个生活页面,按F12,选择Elements栏,点击左边的箭头,把鼠标移到某个视频上面,下栏会定位到其所在的标签,发现这些标签都是在<li class="categoryem">标签下

2.循环li标签内的a标签里href的内容,拼接后是每个视频的详情页地址

3.在视频详情页上,查看视频详情页面的加载方式,发现网页源代码中找不到,说明该页面是动态加载的,这样就无需向详情页发送请求了直接向该地址发送即可(发送了也找不到)

4.通过network查看详情页的请求网址 chenchen.cc

5.朝该详情页发送请求发现获取不到


import requests

url='https://www.pearvideo.com/videoStatus.jsp?contId=1755550&mrd=0.581892639041967'

headers={

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/23'

}

video_page=requests.get(url=url,headers=headers).content

with open('./a.html','wb') as fp:

    fp.write(video_page)


   "resultCode":"5",

   "resultMsg":"该文章已经下线!",

   "systemTime": "1647781607669"

}

6.原因是有防爬措施之防盗链,得定义一个请求头加上Referer参数再去请求网站

7.去浏览器上复制视频的地址发现与我们拿到的有地方不一样

8.接着去想如何去替换核心数据,去拿到真正的视频地址,研究发现通过systemTime即可

 

 {

    "resultCode":"1",

    "resultMsg":"success", "reqId":"8544a57d-1ad8-4d74-83ca-740fd9960052",

    "systemTime": "1647780126911",

    "videoInfo":{"playSta":"1","video_image":"https://image1.pearvideo.com/cont/20220318/11549967-150204-1.png","videos":{"hdUrl":"","hdflvUrl":"","sdUrl":"","sdflvUrl":"","srcUrl":"https://video.pearvideo.com/mp4/third/20220318/1647780126911-11549967-150114-hd.mp4"}}

}


代码示例

复制

#导入模块

import requests

from lxml import etree

import time

import os

# 创建存放视频的目录

if not os.path.exists(r'./video'):

    os.mkdir(r'./video')

#1.生活页面的url

url='https://www.pearvideo.com/category_5'

#UA伪装

headers={

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/23'

}

#2.发送get请求获取页面数据

page_text=requests.get(url=url,headers=headers).text

# 3.使用xpath进行数据解析

#3.1.实例化,将网上获取的源码数据加载到该对象中

tree=etree.HTML(page_text)

# 3.2解析出视频详情链接

li_list=tree.xpath('//*[@id="listvideoListUl"]/li')

for li in li_list:

    #1.解析出视频链接相对地址href="video_1755550"

    datail_url=li.xpath('./div/a/@href')[0]

    #解析出视频名称

    name=li.xpath('./div/a/div[2]/text()')[0]+'.mp4'

    # 每个视频的href _后面的一串数字都不同,将其拆分取出

    video_id = datail_url.split('_')[-1]

    #视频详情页的url

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

    headers = {

        "Referer": "https://www.pearvideo.com/video_%s" % video_id #Referer告诉服务器我是从哪个页面链接过来的

    }

    #2.发起请求,获取视频详情页数据

    res1 = requests.get(url=video_url,params={'contId': video_id},headers=headers)

    # 避免访问次数过多,延迟

    time.sleep(1)

    #返回json对象

    data_dict = res1.json()

    #视频地址srcUrl

    src_url = data_dict['videoInfo']['videos']['srcUrl']

    systemTime = data_dict['systemTime']

    #通过字符串替换拼接成真正地址

    real_url = src_url.replace(systemTime, 'cont-%s' % video_id)

    #发起请求,获取视频二进制数据

    res2 = requests.get(real_url).content

    #拼接成视频存储路径

    file_path = os.path.join('./video', name)

    #进行持久化存储

    with open(file_path, 'wb')as fp:

        fp.write(res2) #写入

    print('%s 下载成功' % name)

-----------------------------------

©著作权归作者所有:来自51CTO博客作者caichen.cc的原创作品,请联系作者获取转载授权,否则将追究法律责任

Python爬取动态加载的视频(梨视频,xpath)


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69920392/viewspace-2878995/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
CAICHEN点cc

注册时间:2022-03-18

  • 博文量
    13
  • 访问量
    4174