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


Posted in Python onNovember 09, 2020

目标网址:梨视频

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

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

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

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

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

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

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

代码如下:

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视频,怎么办?经过我一番努力(扯掉了几十根头发后)发现,它在另外一个网址里面

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

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

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=***************** 没有,怎么办?没有就不要呗,看过我发的百度图片那篇的朋友都懂,网址里面有些东西是不需要的,纯粹是搞咱们这些玩爬虫的,恶心咱们。不过没办法,毕竟是咱们要去爬人家的数据的。

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

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

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

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)

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

搞定!!

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

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

西八!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爬取梨视频实现过程解析

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

Python 相关文章推荐
ptyhon实现sitemap生成示例
Mar 30 Python
python读取浮点数和读取文本文件示例
May 06 Python
Python实现队列的方法
May 26 Python
python实现下载文件的三种方法
Feb 09 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
Python实现FLV视频拼接功能
Jan 21 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
python图片合成的示例
Nov 09 Python
python编写五子棋游戏
May 25 Python
Python eval函数介绍及用法
Nov 09 #Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 #Python
python 用struct模块解决黏包问题
Nov 07 #Python
python hmac模块验证客户端的合法性
Nov 07 #Python
python如何利用paramiko执行服务器命令
Nov 07 #Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 #Python
如何使用Django Admin管理后台导入CSV
Nov 06 #Python
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
PHP中异常处理的一些方法整理
2015/07/03 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Python中字典和集合学习小结
2017/07/07 Python
python 动态加载的实现方法
2017/12/22 Python
PyQt5每天必学之布局管理
2018/04/19 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
JAVA和C++的区别
2013/10/06 面试题
this关键字的作用
2016/01/30 面试题
材料专业毕业生求职信
2014/02/26 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
幼师大班个人总结
2015/02/13 职场文书
邓小平文选读书笔记
2015/06/29 职场文书