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的Django框架中实现Hacker News的一些功能
Apr 17 Python
Python中转换角度为弧度的radians()方法
May 18 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
python中doctest库实例用法
Dec 31 Python
python爬取微博评论的实例讲解
Jan 15 Python
如何获取numpy array前N个最大值
May 14 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令牌 Token改进版
2008/07/18 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
python使用pymysql实现操作mysql
2016/09/13 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
Python可迭代对象操作示例
2019/05/07 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
一套VC试题
2015/01/23 面试题
教师绩效工资方案
2014/02/01 职场文书
党支部工作总结2015
2015/04/01 职场文书
初婚初育证明范本
2015/06/18 职场文书
Django如何与Ajax交互
2021/04/29 Python