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代码实例
Feb 04 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
选择python进行数据分析的理由和优势
Jun 25 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
解决keras backend 越跑越慢问题
Jun 18 Python
Python数组变形的几种实现方法
May 30 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
编写自己的php扩展函数
2006/10/09 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
浅析使用Python搭建http服务器
2019/10/27 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
钳工实习自我鉴定
2013/09/19 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
家装电话营销开场白
2015/05/29 职场文书
2016年教师节感言
2015/12/09 职场文书