基于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 相关文章推荐
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
在Python中操作时间之tzset()方法的使用教程
May 22 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
python验证码识别的实例详解
Sep 09 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python对象属性自动更新操作示例
Jun 15 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Python configparser模块常用方法解析
May 22 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
[原创]图片分页查看
2006/08/28 Javascript
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
详解js闭包
2014/09/02 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python合并多个Excel数据的方法
2018/07/16 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
制药工程专业毕业生推荐信
2013/12/24 职场文书
班风口号
2014/06/18 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
Java实现多文件上传功能
2021/06/30 Java/Android