Python实现bilibili时间长度查询的示例代码


Posted in Python onJanuary 14, 2020

说明:最近在B站看一些材料力学视频时候,感觉有一些分集狂魔的分集真的很恐怖,有的甚至上百集,因此决定写个小脚本每次分析下到底这个系列视频到底有多长。

好了,下面是分析过程:

第一步当然是打开一个视频

接着第二部右键查看源代码

Python实现bilibili时间长度查询的示例代码

既然我们是要查找时间,然后我就搜索time相关的,哟!,还真有,其中有个timelength,英语有点基础的应该也能读出,这不就是时长的意思。哈哈哈,这也太简单了,但是又发现高兴太早了,这个经过不论是除60还是除3600都无法得到需要的结果,就在这时,突然一个乘法口诀蹦了出来,这个timelength的前几位除60不就是要的结果吗,这样我们就顺利找到了

接下来又出现一个问题,这一个页面的是出来的,但是一共有多少总不能每次都要输入吧,接下来就继续分析
看了一下,一共有93集,但是直接搜肯定是不行的,毕竟搜了一下有一百多个。看来要另想出路了。
想到刚才的timelength参数是使用的类似字典类型,那我接按字典的格式搜不也行吗,
这下行了,搜到的第一个就是,哈哈,我都有些自负了,这也太简单了,这个问题再次被顺利解决了。

最后是代码,小白写,大佬勿喷,如有不足还请谅解,源码已上传至GitHub

import requests
import re
import pygame
import time

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
            'Chrome/74.0.3729.157 ''Safari/537.36 '}


class Bili(object):
  def __init__(self, url):
    self.url = url
    self.max_page = 0
    self.the_time = list()
    self.sum_time = 0
    self.b_url = 'https://www.bilibili.com/video/av' + re.search(r'av(\d+)', url).group(1) + '?p='

  @staticmethod
  def get_html(acp_url):
    try:
      r = requests.get(acp_url, headers=header)
      r.raise_for_status()
      r.encoding = r.apparent_encoding
      return r.text
    except Exception as result:
      print("get_html:", result)
      return ""

  def parse_max_page(self):
    self.max_page = int(re.findall(r'videos":(.+?),', self.get_html(self.url))[0])

  def parse_time(self, se_url):
    text = self.get_html(se_url)
    single_time = re.findall(r'"timelength":(\d+),', text)[0][:-3]
    return single_time

  def get_time(self):
    for i in range(self.max_page + 1):
      s_url = self.b_url + str(i)
      ret = self.parse_time(s_url)
      self.the_time.append(ret)
      print("第%d页 time=%s" % (i, ret))
    for each in self.the_time:
      self.sum_time += int(each)
    print("sum_time:%.3s h" % str(self.sum_time / 60))
 
  def main(self):
    self.parse_max_page()
    self.get_time()


if __name__ == '__main__':
  i_url = input("请输入链接地址[要以+结尾]:")
  Bili(i_url).main()

说明

这句i_url = input("请输入链接地址[要以+结尾]:")由于本身编译器的原因,直接回车会跳转

GitHub地址:https://github.com/easyprogramer/My_Python_Spider/tree/master

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
Jun 27 Python
Python快速查找list中相同部分的方法
Jun 27 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
python2.7和NLTK安装详细教程
Sep 19 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
python多线程调用exit无法退出的解决方法
Feb 18 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
Python如何解除一个装饰器
Aug 07 Python
基于python监控程序是否关闭
Jan 14 #Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 #Python
使用Pytorch来拟合函数方式
Jan 14 #Python
pytorch 模拟关系拟合——回归实例
Jan 14 #Python
PyTorch实现AlexNet示例
Jan 14 #Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 #Python
Python实现钉钉订阅消息功能
Jan 14 #Python
You might like
用Zend Encode编写开发PHP程序
2010/02/21 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
Python可变参数函数用法实例
2015/07/07 Python
Python自动登录126邮箱的方法
2015/07/10 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
机电一体化专业应届本科生求职信
2013/09/27 职场文书
大学生水文观测实习自我鉴定
2013/09/29 职场文书
自动化专业本科毕业生求职信
2013/10/20 职场文书
领导干部培训感言
2014/01/23 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
MySQL 覆盖索引的优点
2021/05/19 MySQL
nginx配置之并发频次限制
2022/04/18 Servers