基于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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
利用Python获取操作系统信息实例
Sep 02 Python
Python 数据结构之旋转链表
Feb 25 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
python批量爬取下载抖音视频
Jun 17 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
python实现udp聊天窗口
Mar 31 Python
Python实现弹球小游戏
Aug 01 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
终于听上了直流胆调频
2021/03/02 无线电
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
微信支付开发告警通知实例
2016/07/12 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
javascript this用法小结
2008/12/19 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
python检测某个变量是否有定义的方法
2015/05/20 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Python+Wordpress制作小说站
2017/04/14 Python
详解如何设置Python环境变量?
2019/05/13 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
Pytorch 实现权重初始化
2019/12/31 Python
python实现拼图小游戏
2020/02/22 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
民主评议党员工作总结
2014/10/20 职场文书
门店店长岗位职责
2015/04/14 职场文书
道歉的话怎么说
2015/05/12 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
网络舆情信息简报
2015/07/21 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
Python基础之操作MySQL数据库
2021/05/06 Python
Vue实现下拉加载更多
2021/05/09 Vue.js