基于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中range()与xrange()用法分析
Sep 21 Python
Python 通过URL打开图片实例详解
Jun 01 Python
python 文件操作删除某行的实例
Sep 04 Python
Python3.4解释器用法简单示例
Mar 22 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
python中Lambda表达式详解
Nov 20 Python
Python实现自动访问网页的例子
Feb 21 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
Python 解决空列表.append() 输出为None的问题
May 23 Python
浅谈pytorch中的dropout的概率p
May 27 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python实现基本线性数据结构
2016/08/22 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
python实现石头剪刀布小游戏
2021/01/20 Python
python算法题 链表反转详解
2019/07/02 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
python基于win32api实现键盘输入
2020/12/09 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
小学生我的梦想演讲稿
2014/08/21 职场文书
作风整顿剖析材料
2014/09/30 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android