基于python爬取梨视频实现过程解析

 更新时间:2020年11月09日 08:58:19   作者:python之恋  
这篇文章主要介绍了基于python爬取梨视频实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

目标网址:梨视频

然后我们找到科技这一页:https://www.pearvideo.com/category_8。其实你要哪一页都行,你喜欢就行。嘿嘿…

这是动态网站,所以咱们直奔network 然后去到XHR:


找规律,这个应该不难,我就直接贴网址上来咯,想要锻炼的可以找找看哈:

https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=8&start=0

这个就是我们要找的目标网址啦,后面的0就代表页数,让打开这个网页发现是静态网页,这最好搞啦,直接上:


代码如下:

import requests
import parsel,re
import os
target = "https://www.pearvideo.com/videoStatus.jsp?contId="

url = "https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0"
res = requests.get(url)
res.encoding="utf-8"
html = parsel.Selector(res.text)
lists = html.xpath('/html/body/li/div/a/@href').getall()
for each in lists:

  print("https://www.pearvideo.com/"+each)

output;
https://www.pearvideo.com/video_1703486
https://www.pearvideo.com/video_1703189
https://www.pearvideo.com/video_1703161
https://www.pearvideo.com/video_1702880
https://www.pearvideo.com/video_1702773
...

顺利拿到,然后进入播放页面,却发现找不到MP4视频,怎么办?经过我一番努力(扯掉了几十根头发后)发现,它在另外一个网址里面


咋办?当然要想办法把这个网址搞到手啦,仔细分析下,发现这个网址非常陌生呀,唯一稍微熟悉点的就是那串数字了,前面我们拿到播放页的网址后面那串数字和这个对比,完全是一模一样的,这样的话那就好搞了,咱们直接用拼接的方式把它接上去就可以了,看代码:

for each in lists:
  url_num = each.replace('video_',"")
  urls = target+url_num
  print(urls)
``

```python
output:
https://www.pearvideo.com/videoStatus.jsp?contId=1703486
https://www.pearvideo.com/videoStatus.jsp?contId=1703189
https://www.pearvideo.com/videoStatus.jsp?contId=1703161
https://www.pearvideo.com/videoStatus.jsp?contId=1702880
https://www.pearvideo.com/videoStatus.jsp?contId=1702773
https://www.pearvideo.com/videoStatus.jsp?contId=1702633
...

出来了,好像稍微有点不一样,后面那啥&mrd=***************** 没有,怎么办?没有就不要呗,看过我发的百度图片那篇的朋友都懂,网址里面有些东西是不需要的,纯粹是搞咱们这些玩爬虫的,恶心咱们。不过没办法,毕竟是咱们要去爬人家的数据的。

网址问题解决了,但是点进去一看,发现这东东:

恩,很明显,是遇到反爬机制了,这个好搞,要什么给什么就行,代码如下:

	headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
  'Referer': 'https://www.pearvideo.com/video_'+ str(url_num)
  }
  html = requests.get(urls,headers=headers).text
  print(html)


搞定!!

最后我们看一下MP4能不能播放:


西八!404!!恩,这里就稍微有点麻烦了,还得找数据,把里面的时间戳改成 ‘cont-数字‘,感觉写了好多,手都有点累了,我就直接上代码了:

import requests
import parsel,re
import os


 
target = "https://www.pearvideo.com/videoStatus.jsp?contId="

url = "https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0"
res = requests.get(url)
res.encoding="utf-8"
html = parsel.Selector(res.text)
lists = html.xpath('/html/body/li/div/a/@href').getall()
# print(lists[2:])
# 提取视频后面的数字,数字是最重要的,需要传给 Referer 和 urls
for each in lists:
  url_num = each.replace('video_',"")
  urls = target+url_num
  # print(urls)
  headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
  'Referer': 'https://www.pearvideo.com/video_'+ str(url_num)
  }
  html = requests.get(urls,headers=headers).text
  
  cont = 'cont-' + str(url_num)

  # 提取 mp4 视频
  srcUrl = re.findall(f'"srcUrl":"(.*?)"',html)[0]
  # 替换视频里面的时间戳,改为可以真正播放的数据
  new_url = srcUrl.replace(srcUrl.split("-")[0].split("/")[-1],cont)
  print(new_url)
  

  # 使用视频后缀当视频名称
  filename = srcUrl.split("/")[-1]

  # 保存到本地
  with open("./images/"+filename,"wb") as f:
    f.write(requests.get(new_url).content)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python中图形库turtle库详解(适用于计算机二级)

    python中图形库turtle库详解(适用于计算机二级)

    Turtle库是Python语言中的一个图形库,可以用来绘制各种形状,如线条、矩形、圆形等等,下面这篇文章主要给大家介绍了关于python中图形库turtle库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • 使用 Python 破解压缩文件的密码的思路详解

    使用 Python 破解压缩文件的密码的思路详解

    这篇文章主要介绍了使用 Python 破解压缩文件的密码的思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Macbook air m1安装python/anaconda全过程(图文)

    Macbook air m1安装python/anaconda全过程(图文)

    这篇文章主要介绍了Macbook air m1安装python/anaconda全过程(图文),文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python 批量读取文件中指定字符的实现

    Python 批量读取文件中指定字符的实现

    这篇文章主要介绍了Python 批量读取文件中指定字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 如何在python中实现capl语言里的回调函数(推荐)

    如何在python中实现capl语言里的回调函数(推荐)

    CAPL是一种程序语言,其中程序块的执行由事件控制,主要介绍了如何在python中实现capl语言里的回调函数及事件函数的作用,需要的朋友可以参考下
    2022-08-08
  • Python实战之屏幕录制功能的实现

    Python实战之屏幕录制功能的实现

    屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文 主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助
    2025-03-03
  • Python蓄水池算法的应用案例与代码详解

    Python蓄水池算法的应用案例与代码详解

    蓄水池算法(Reservoir Sampling)是一种用于处理大规模数据流的随机抽样算法,该算法能够在不知道数据流大小的情况下,从数据流中均匀随机地抽取固定大小的样本,本文给大家介绍了一个详细的Python蓄水池算法的实现,包括完整的代码示例,需要的朋友可以参考下
    2024-11-11
  • python使用梯度下降算法实现一个多线性回归

    python使用梯度下降算法实现一个多线性回归

    这篇文章主要为大家详细介绍了python使用梯度下降算法实现一个多线性回归,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • NumPy随机数据分布与Seaborn可视化详解

    NumPy随机数据分布与Seaborn可视化详解

    数据分布是指数据集中所有可能值出现的频率,并用概率来表示,它描述了数据取值的可能性,Seaborn 是一个基于 Matplotlib 的 Python 数据可视化库,用于创建统计图表,本文就给大家详细的介绍一下NumPy随机数据分布与Seaborn可视化,需要的朋友可以参考下
    2024-05-05
  • python实现门限回归方式

    python实现门限回归方式

    今天小编就为大家分享一篇python实现门限回归方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论