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使用MySQLdb for Python操作数据库教程
Oct 11 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
python爬取个性签名的方法
Jun 17 Python
Python实现的建造者模式示例
Aug 06 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
python的time模块和datetime模块实例解析
Nov 29 Python
python dumps和loads区别详解
Feb 04 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
Python自省及反射原理实例详解
Jul 06 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实现删除非站内外部链接实例代码
2014/06/17 PHP
php获取url参数方法总结
2014/11/13 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
input 高级限制级用法
2009/03/26 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python中turtle作图示例
2017/11/15 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
python openpyxl模块的使用详解
2021/02/25 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
全国文明单位申报材料
2014/05/31 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2016春节放假通知范文
2015/08/18 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python