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爬虫之抓取糗事百科代码分享
Nov 06 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
Python中遍历列表的方法总结
Jun 27 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
pytorch 状态字典:state_dict使用详解
Jan 17 Python
python中68个内置函数的总结与介绍
Feb 24 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
详解Python中import机制
Sep 11 Python
Python模拟键盘输入自动登录TGP
Nov 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数据类型之布尔型的介绍
2013/04/28 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PDO::_construct讲解
2019/01/27 PHP
小试JQuery的AutoComplete插件
2011/05/04 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
Python ljust rjust center输出
2008/09/06 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
详解Python循环作用域与闭包
2019/03/21 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
校园餐饮创业计划书
2014/01/10 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
党员教师批评与自我批评发言稿
2014/10/15 职场文书
2014年质量工作总结
2014/11/22 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python