Python爬取梨视频的示例

 更新时间:2021年01月29日 10:05:06   作者:Miraak  
这篇文章主要介绍了Python爬取梨视频的示例,帮助大家更好的利用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中pandas的dataframe过滤数据方法

    Python中pandas的dataframe过滤数据方法

    这篇文章主要介绍了Python中pandas的dataframe过滤数据方法,Pandas是另外一个用于处理高级数据结构和数据分析的Python库,Pandas是基于Numpy构建的一种工具,需要的朋友可以参考下
    2023-07-07
  • 在Django同1个页面中的多表单处理详解

    在Django同1个页面中的多表单处理详解

    这篇文章主要给大家介绍了在Django同1个页面中的多表单处理的相关资料,文章先给大家介绍了如何快速上手Django实现项目的方法,方便让大家理解和学习,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • Python利用lxml库实现XML高级处理详解

    Python利用lxml库实现XML高级处理详解

    在Python的世界中,lxml是处理XML和HTML的一款强大且易用的库,本文主要介绍了如何解析、创建、修改XML文档,如何使用XPath查询,以及如何解析大型XML文档,需要的可以参考下
    2023-08-08
  • 用Python解数独的方法示例

    用Python解数独的方法示例

    这篇文章主要介绍了用Python解数独的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python连接Oracle之环境配置、实例代码及报错解决方法详解

    Python连接Oracle之环境配置、实例代码及报错解决方法详解

    这篇文章主要介绍了Python连接Oracle之环境配置、实例代码及报错解决方法详解,需要的朋友可以参考下
    2020-02-02
  • pygame库实现移动底座弹球小游戏

    pygame库实现移动底座弹球小游戏

    这篇文章主要为大家详细介绍了pygame库实现移动底座弹球小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • python+flask实现API的方法

    python+flask实现API的方法

    这篇文章主要为大家详细介绍了python+flask实现API的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python机器学习案例教程——K最近邻算法的实现

    python机器学习案例教程——K最近邻算法的实现

    本篇文章主要介绍了python机器学习案例教程——K最近邻算法的实现,详细的介绍了K最近邻算法的概念和示例,具有一定的参考价值,有兴趣的可以了解一下
    2017-12-12
  • python 导入数据及作图的实现

    python 导入数据及作图的实现

    今天小编就为大家分享一篇python 导入数据及作图的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python脚本,标识符,变量使用,脚本语句,注释,模块引用详解

    Python脚本,标识符,变量使用,脚本语句,注释,模块引用详解

    这篇文章主要为大家详细介绍了Python脚本,标识符,变量使用,脚本语句,注释,模块引用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论