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中列表的一些基本操作知识汇总
May 20 Python
Python创建xml文件示例
Mar 22 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
python使用folium库绘制地图点击框
Sep 21 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
Flask中endpoint的理解(小结)
Dec 11 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
python利用tkinter实现图片格式转换的示例
Sep 28 Python
python+openCV对视频进行截取的实现
Nov 27 Python
Python 可视化神器Plotly详解
Dec 26 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
深入extjs与php参数交互的详解
2013/06/25 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
javascript document.execCommand() 常用解析
2009/12/14 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python中的包和模块实例
2014/11/22 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python 决策树算法的实现
2020/10/09 Python
StubHub德国:购买和出售门票
2017/09/06 全球购物
为什么需要版本控制?
2013/08/08 面试题
客户服务经理岗位职责
2014/01/29 职场文书
社区安全检查制度
2014/02/03 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
小学总务工作总结
2015/08/13 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
关于Python使用turtle库画任意图的问题
2022/04/01 Python
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python