基于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 相关文章推荐
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python读取word文本操作详解
Jan 22 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
Python turtle绘画象棋棋盘
Aug 21 Python
手写一个python迭代器过程详解
Aug 27 Python
大数据分析用java还是Python
Jul 06 Python
Python colormap库的安装和使用详情
Oct 06 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 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
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python实现图书借阅系统
2019/02/20 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
介绍一下linux文件系统分配策略
2012/11/17 面试题
教师自荐书
2013/10/08 职场文书
保险专业自荐信范文
2014/02/20 职场文书
服装设计专业自荐信
2014/06/17 职场文书
意向书范本
2014/07/29 职场文书
2014年护理部工作总结
2014/11/14 职场文书
聘任通知书
2015/09/21 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python