Python selenium抓取虎牙短视频代码实例


Posted in Python onMarch 02, 2020

今天闲着没事,用selenium抓取视频保存到本地,只爬取了第一页,只要小于等于5分钟的视频。。。

为什么不用requests,没有为什么,就因为有些网站正则和xpath都提取不出来想要的东西,要么就是接口出来的数据加密,要么就因为真正的视频url规律难找!

selenium几行代码轻轻松松就搞定!

安装selenium库,设置无界面模式

代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
#设置无界面模式
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
 
class VideoCrawl(object):
  video_box=[]#收集video真正的url
  def __init__(self,url):
    self.driver=webdriver.Chrome(executable_path=r"C:\Program Files\python\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe",options=chrome_options)#设置无界面模式
    self.driver.get(url)
 
  #程序运行完毕,析构函数关闭selenium
  def __del__(self):
    print("爬取结束。。。。。",len(VideoCrawl.video_box),VideoCrawl.video_box)
    self.driver.close()
 
  def run(self):
    self.get_detail_info()
  #获取列表页所有详情页的url
  def get_detail_info(self):
    detail_info = self.driver.find_elements_by_xpath('//a[@class="video-wrap statpid"]')
    detail_url=[]
    for i in detail_info:
      detail_url.append(i.get_attribute('href'))#获取视频页url
    video_playtime_list=self.driver.find_elements_by_xpath('//span[@class="video-duration"]')
    video_playtime_list=[i.text for i in video_playtime_list]
    for res in zip(detail_url,video_playtime_list):
      playtime=res[1].split(":")[0]
      # print("playtime--------",playtime)
      if int(res[1].split(":")[0])<=5:#播放时间小于5分钟的要
        # print(res[0],"解析的url",playtime)
        self.parse_video(res[0],res[1])
      else:
        pass
  #解析详情页
  def parse_video(self,url,t):
    self.driver.get(url)
    videoobj = self.driver.find_elements_by_xpath('//video')
    video_url=videoobj[0].get_attribute('src')
    title=self.driver.find_elements_by_xpath('//h1[@class="video-title"]')[0].text
    print('video_url--------',video_url,title,t)
    #保存video到本地
    self.save_video(video_url,title,t)
    #类变量统计video_url
    VideoCrawl.video_box.append(video_url)
  #保存,请求video_url,二进制保存为mp4
  def save_video(self,url,title,t):
    filename="video"+title+"-"+t.replace(":","")+".mp4"
    video=requests.get(url).content
    with open(filename,"wb") as file:
      file.write(video)
    print(f"{filename}写入文件完毕")
 
if __name__ == '__main__':
  crawl=VideoCrawl('https://v.huya.com/cat/7')
  crawl.run()

运行结果如下:

"C:\Program Files\python\python.exe" C:/Users/Administrator.SC-201903160419/Desktop/note/exer/myapp.py
video_url-------- https://huya-w10.huya.com/2005/265917310/1300/d973823b0f437c9d78fc40b9691fdb54.mp4 【轩子小剧场】最意外的自行车 04:23
video【轩子小剧场】最意外的自行车-0423.mp4写入文件完毕
video_url-------- https://huya-w10.huya.com/2006/267302224/1300/f8a363ec243e4adb2857491f695bc118.mp4 轩子巨2兔:轩子教你演戏 05:06
video轩子巨2兔:轩子教你演戏-0506.mp4写入文件完毕
video_url-------- https://huya-w6.huya.com/2005/264805062/1300/582b726b05db31fc12a1e5557011a6bf.mp4 【麦秀彩儿】跳个舞吧 05:58
video【麦秀彩儿】跳个舞吧-0558.mp4写入文件完毕
video_url-------- https://huya-w10.huya.com/2005/264956230/1300/97fa603f7b174ec30c19013f894bd108.mp4 轩子小剧场:你的女仆请签收 01:18
 
Process finished with exit code -1

Python selenium抓取虎牙短视频代码实例

都可以正常播放。。。

切记:自己娱乐下练练手删了即可,千万不要用于商业用途哦!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的框架中为MySQL实现restful接口的教程
Apr 08 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
Python中new方法的详解
Jan 15 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
Python字符串的一些操作方法总结
Jun 10 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
简单了解python列表和元组的区别
May 14 Python
使用pytorch实现线性回归
Apr 11 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 #Python
python mysql 字段与关键字冲突的解决方式
Mar 02 #Python
python3实现往mysql中插入datetime类型的数据
Mar 02 #Python
python3将变量写入SQL语句的实现方式
Mar 02 #Python
Python *args和**kwargs用法实例解析
Mar 02 #Python
Python通过2种方法输出带颜色字体
Mar 02 #Python
Python实现屏幕录制功能的代码
Mar 02 #Python
You might like
php页面缓存ob系列函数介绍
2012/10/18 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
python3实现ftp服务功能(客户端)
2017/03/24 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
python numpy格式化打印的实例
2018/05/14 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
python三方库之requests的快速上手
2019/03/04 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Python如何将装饰器定义为类
2020/07/30 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
css3中transition属性详解
2014/09/02 HTML / CSS
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
英国名牌男装店:Standout
2021/02/17 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
党员实事承诺书
2014/03/26 职场文书
领导班子对照检查材料
2014/09/22 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
2015年教师国培感言
2015/08/01 职场文书
一文搞懂Java中的注解和反射
2022/06/21 Java/Android