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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
Python 元类实例解析
Apr 04 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
python使用zip将list转为json的方法
Dec 31 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Python实现GIF图倒放
Jul 16 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
python实现的人脸识别打卡系统
May 08 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
php全排列递归算法代码
2012/10/09 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
php读取mysql的简单实例
2014/01/15 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
Python 控制终端输出文字的实例
2019/07/12 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
2013的个人自我评价
2013/12/26 职场文书
公司周年庆典邀请函
2014/01/12 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
股东授权委托书范文
2014/09/13 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python