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 26 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
python系列 文件操作的代码
Oct 06 Python
python的等深分箱实例
Nov 22 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
opencv 分类白天与夜景视频的方法
Jun 05 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 Python
Python torch.flatten()函数案例详解
Aug 30 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 构造函数construct的前下划线是双的_
2009/12/08 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
javascript innerText和innerHtml应用
2010/01/28 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python素数检测的方法
2015/05/11 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
python中字符串前面加r的作用
2015/06/04 Python
python实现ping的方法
2015/07/06 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Python进程间通信Queue消息队列用法分析
2019/05/22 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
上海奥佳笔试题面试题
2016/11/16 面试题
大学军训感言300字
2014/03/09 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书