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中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
python八皇后问题的解决方法
Sep 27 Python
Django 重写用户模型的实现
Jul 29 Python
python3 map函数和filter函数详解
Aug 26 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
python plotly画柱状图代码实例
Dec 13 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
python安装和pycharm环境搭建设置方法
May 27 Python
Python turtle库的画笔控制说明
Jun 28 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
Python学习之迭代器详解
Apr 01 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
论建造顺序的重要性
2020/03/04 星际争霸
PHP memcache扩展的三种安装方法
2009/04/26 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
js读取配置文件自写
2014/02/11 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
ant design实现圈选功能
2019/12/17 Javascript
js实现简单扫雷
2020/11/27 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
python 图片验证码代码分享
2012/07/04 Python
python根据京东商品url获取产品价格
2015/08/09 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
python实现感知机模型的示例
2020/09/30 Python
python 实现Harris角点检测算法
2020/12/11 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
华为c/c++笔试题
2016/01/25 面试题
自荐信模版
2013/10/24 职场文书
内容编辑个人求职信
2013/12/10 职场文书
物业门卫岗位职责
2013/12/28 职场文书
四年大学自我鉴定
2014/02/17 职场文书
相亲大会策划方案
2014/06/05 职场文书
矛盾论读书笔记
2015/06/29 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers