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获取list下标及其值的简单方法
Sep 12 Python
深入浅出分析Python装饰器用法
Jul 28 Python
python中Switch/Case实现的示例代码
Nov 09 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
Apache,wsgi,django 程序部署配置方法详解
Jul 01 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
Python autoescape标签用法解析
Jan 17 Python
python3 字符串知识点学习笔记
Feb 08 Python
python单例模式的应用场景实例讲解
Feb 24 Python
python正则表达式re.search()的基本使用教程
May 21 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、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
Python lxml模块安装教程
2015/06/02 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
django创建超级用户过程解析
2019/09/18 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
五心教育心得体会
2014/09/04 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
田径运动会通讯稿
2015/07/18 职场文书
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫
vue打包时去掉所有的console.log
2022/04/10 Vue.js
python内置模块之上下文管理contextlib
2022/06/14 Python