• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python爬取梨视频的示例

    爬取流程(美食区最热标签下的三个视频)

    1. 在首页获取视频的编号和名字
    2. 拼接成正确的url
    3. 保存视频

    思路

    1.从网页中获取视频的url

    发现视频的url在id为“JprismPlayer”的div标签下的video标签src属性中,xpath解析网页

    video_url = tree.xpath("//div[@id='JprismPlayer']/video/@src")

    但得到的返回值为空,也就是说这个video标签在原网页中并不存在,很可能是动态加载出来的

    2. 从动态请求获取视频的url

    果然在动态请求中发现了包含视频url的json数据

    可是发起请求后拿到的json数据却和抓包工具中看到的不一样,试着在请求头中加入Referer参数,查看referer可以发现,它最后video_后面跟的是首页中视频的编号

    {
    	"resultCode":"1",
    	"resultMsg":"success", "reqId":"fd1c910d-f49a-431a-b9a4-9c193c3c1983",
    	"systemTime": "1611666178518",
    	"videoInfo":{"playSta":"1","video_image":"https://image1.pearvideo.com/cont/20210125/11107897-184717-1.png","videos":{"hdUrl":"","hdflvUrl":"","sdUrl":"","sdflvUrl":"","srcUrl":"https://video.pearvideo.com/mp4/third/20210125/1611666178518-11107897-181816-hd.mp4"}}
    }

    在headers中加入Referer后顺利拿到json数据

    可向json数据中的视频url发起请求拿到的却是404页面

    3. 拼接正确的url

    这里花了很长时间去想哪里有问题,把前面的步骤理了很多遍才发现,其实动态请求返回的json数据中的视频url和主页video标签中的视频url根本不一致

    首页中加载出来的视频链接是正确的,可以顺利的拿到视频,而json数据中的链接则会返回404。把他们进行对比,可以看到他们前半部分是一样的,但到了红线框住的地方就不一样了。
    正确的url是 cont-视频id-
    而json数据中的url这个部分是 一串数字
    那只要把这一串数字改成 cont-视频id- 的形式就能获得正确的视频url了

    代码

    # 爬取梨视频
    
    import requests
    from lxml import etree
    import os
    from multiprocessing import Pool
    
    # 梨视频首页url
    url = "https://www.pearvideo.com/category_6"
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
      }
    
    # 获取响应,并用etree解析
    response = requests.get(url=url, headers=headers).text
    tree = etree.HTML(response)
    
    # 拿到视频的名字和视频号
    video_id_list = tree.xpath("//ul[@class='listvideo-list clearfix']/li[@class='categoryem ']//a[@class='vervideo-lilink actplay']/@href")
    video_name_list = tree.xpath("//ul[@class='listvideo-list clearfix']/li[@class='categoryem ']//a/div[@class='vervideo-title']/text()")
    data_list = [{"name": video_name_list[i], "idNum": video_id_list[i][6:]} for i in range(len(video_name_list))]
    
    # 创建一个存放视频的文件夹
    if not os.path.exists("./videos"):
      os.mkdir("./videos")
    
    # 获取视频的函数
    def down_video(data):
      name = data['name']
      idNum = data['idNum']
    
      # 获取视频需要的headers,注意这里的Referer要和视频的id匹配
      headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
        'Referer': f'https://www.pearvideo.com/video_{idNum}'
      }
      # 获取接近真正视频url的url,这里的id也需要和视频id匹配才行
      url = f'https://www.pearvideo.com/videoStatus.jsp?contId={idNum}'
    
      # 得到包含视频地址json响应数据
      response = requests.get(url=url, headers=headers).json()
      video_url = response["videoInfo"]["videos"]["srcUrl"]
    
      # 将视频地址中的数字替换成 cont-视频编号 拿到真正的视频地址
      video_url = video_url.replace(video_url.split("/")[-1].split("-")[0], "cont-" + idNum)
    
      # 拿到视频并保存
      video = requests.get(url=video_url, headers=headers).content
      with open(f"./videos/{name}.mp4", "wb") as f:
        print(f"正在下载视频 {name} ...")
        f.write(video)
        print(f"视频 {name} 下载完成!")
    
    if __name__ == '__main__':
      # 创建进程池并使用
      pool = Pool(3)
      pool.map(down_video, data_list)
      pool.close()
      pool.join()

    总结

    其实最难的地方是获取正确的视频url,中间过程比较绕。只要找到这个地址,再加上从首页拿到的视频id就可以顺利拿到视频了。
    如果要爬取整个首页视频只需要重新设置xpath路径就可以了。

    以上就是Python爬取梨视频的示例的详细内容,更多关于Python爬取梨视频的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • python爬取youtube视频的示例代码
    • Python爬取某平台短视频的方法
    • python爬取抖音视频的实例分析
    • 使用python爬取抖音app视频的实例代码
    • 基于python爬取梨视频实现过程解析
    • Python爬取腾讯视频评论的思路详解
    • Python爬取视频(其实是一篇福利)过程解析
    • python爬取m3u8连接的视频
    • Python爬取某拍短视频
    上一篇:使用Python封装excel操作指南
    下一篇:Python3使用tesserocr识别字母数字验证码的实现
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python爬取梨视频的示例 Python,爬取,梨,视频,的,示例,