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迭代用法实例教程
Sep 08 Python
在Linux中通过Python脚本访问mdb数据库的方法
May 06 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
Python搜索引擎实现原理和方法
Nov 27 Python
python实现NB-IoT模块远程控制
Jun 20 Python
Django model序列化为json的方法示例
Oct 16 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Python函数中的可变长参数详解
Sep 12 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
基于python实现坦克大战游戏
Oct 27 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的curl实现get和post的代码
2008/08/23 PHP
thinkphp实现数组分页示例
2014/04/13 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
PHP学习记录之数组函数
2018/06/01 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
JavaScript的目的分析
2007/01/05 Javascript
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
JS处理VBArray的函数使用说明
2008/05/11 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
委托证明的格式
2014/01/10 职场文书
文明教师事迹材料
2014/01/16 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
付款证明格式范文
2015/06/19 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python