基于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使用chardet判断字符串编码的方法
Mar 13 Python
Python验证文件是否可读写代码分享
Dec 11 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
python匿名函数用法实例分析
Aug 03 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
PHP通用检测函数集合
2011/02/08 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
phalcon框架使用指南
2016/02/23 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
基于python3生成标签云代码解析
2020/02/18 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
租房协议书
2014/04/10 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
护士求职简历自我评价
2015/03/10 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
Go遍历struct,map,slice的实现
2021/06/13 Golang
解析python中的jsonpath 提取器
2022/01/18 Python
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python