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实现的多线程端口扫描功能示例
Jan 21 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
python使用Tesseract库识别验证
Mar 21 Python
Python正则表达式和元字符详解
Nov 29 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
Tensorflow 多线程设置方式
Feb 06 Python
python查询MySQL将数据写入Excel
Oct 29 Python
变长双向rnn的正确使用姿势教学
May 31 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 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
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
学习python 之编写简单乘法运算题
2016/02/27 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Python实现结构体代码实例
2020/02/10 Python
python的列表List求均值和中位数实例
2020/03/03 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
Python urllib.request对象案例解析
2020/05/11 Python
Python爬虫教程知识点总结
2020/10/19 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
顶岗实习计划书
2014/01/10 职场文书
高中体育教学反思
2014/01/24 职场文书
环境建设实施方案
2014/03/14 职场文书
学校校庆演讲稿
2014/05/22 职场文书
物业管理专业求职信
2014/06/11 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
会计工作岗位职责
2015/02/03 职场文书