基于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的urllib库提交WEB表单
Feb 24 Python
Python自动化构建工具scons使用入门笔记
Mar 10 Python
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
深入解析Python中的urllib2模块
Nov 13 Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
python pytest进阶之fixture详解
Jun 27 Python
python实现局域网内实时通信代码
Dec 22 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
python两个list[]相加的实现方法
Sep 23 Python
Python Numpy之linspace用法说明
Apr 17 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
如何做到多笔资料的同步
2006/10/09 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python如何去除字符串中不想要的字符
2020/07/05 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
基于python实现删除指定文件类型
2020/07/21 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
路政管理专业个人自荐信范文
2013/11/30 职场文书
省文明单位申报材料
2014/05/08 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
预防煤气中毒方案
2014/06/16 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
公司老总年会致辞
2015/07/30 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python