python爬虫搭配起Bilibili唧唧的流程分析

前言

最近需要大规模下载B站视频,同时要将下载好的视频用BV号进行重命名,最后上传至服务器。这个工作一开始我是完全手工完成的,通过游猴来下载,可是下载几十个视频还好,再多一点的话真是太烦了,而且生产力低下,因此诞生了编写脚本的想法。
一开始我需要在B站搜索关键词,然后不断点开视频后进行下载,同时在视频下载后还需要找到这个视频来修改BV号,效率实在太低,特别是当下载的视频多了,再返回来寻找它对应的BV号时也是个很繁琐的过程,因此决定进行编写python脚本。
本次的脚本可以大幅度提高工作效率,但是它并不是全自动完成任务的,毕竟我们用到了Bilibili唧唧。(唧唧真的很好用,其实也可以完全做成全自动,但我觉得没什么必要了,效率已经很高啦~)
大家如果还有什么更好的建议欢迎评论告诉我。
最后,给个赞吧,亲~

概述

简要介绍一下工作流程:
(1)通过爬虫爬取一堆视频BV号,存放于txt文件中,如下所示:

(2)不断复制BV号,唧唧便会自动进行下载视频

(3)通过脚本将下载好的视频一键化改名

正文

爬虫部分

1.依赖库

requestsl

xml

2.代码
相关讲解已在注释标注。

'''
author:Ericam
description: 用于爬取b站视频链接
'''
import requests
import re
from lxml import etree
import time

'''
该函数用于解析爬取的网页。
提取出网页里视频的url链接以及对应的视频名。
'''
def getHref(url,page):
 try:
 req = requests.get(url,timeout=5,headers=headers)
 html = req.text
 data = etree.HTML(html)
 '''
 page-1://*[@id="all-list"]/div[1]/div[2]/ul[@class="video-list"]/li
 other://*[@id="all-list"]/div[1]/ul[@class="video-list"]/li
 '''
 pattern = '//*[@id="all-list"]/div[1]/div[2]/ul[contains(@class,"video-list")]/li' if page == 1 else '//*[@id="all-list"]/div[1]/ul[contains(@class,"video-list")]/li'
 vurlList = data.xpath(pattern)
 for li in vurlList:
  vurl = li.xpath(".//a/attribute::href")[0]
  title = li.xpath(".//a/attribute::title")[0]
  yield vurl,title
 except:
 print('第%d页爬取失败' % page)
 print('Unfortunitely -- An Unknow Error Happened, Please wait 3 seconds')
 time.sleep(3)

'''
该函数用于正则提取,将url内的BV号提取出来
'''
def getBv(href):
 pattern = re.compile('(BV.*?)\?')
 data = re.search(pattern,href)
 if data == None:
 return ''
 return data.group(1)

if __name__ == "__main__":

 #头部伪装
 headers = {
 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
 }
 hrefList = []
 titleList = []
 #需要爬取多少页,自行进行修改,本代码测试1~2页
 for i in range(1,3):
 url = "https://search.bilibili.com/all?keyword=歪嘴战神&page={0}".format(i) #修改keyword后的关键字即可
 l = getHref(url,i)
 for vurl,title in l:
  hrefList.append(vurl)
  titleList.append(title)
 print("第{0}页爬取结束".format(i))
 time.sleep(2)

 print("---------------------------开始截取BV号-----------------------------")
 for i in range(len(hrefList)):
 hrefList[i] = getBv(hrefList[i])
 with open("bv.txt",'w',encoding='utf-8') as f:
 for i in range(len(hrefList)):
  f.write(hrefList[i]+"\t"+titleList[i]+"\n")
 print("爬取结束")

3.爬取结果

唧唧下载视频

给出唧唧的链接,唧唧,很好用的小工具。
我们只需要将刚才爬取好的链接放在一边,不断复制BV号,然后唧唧进行下载即可。

视频重命名

唧唧下载好的视频如下所示:

为什么需要将它们进行改名呢,因为如果当视频数量越来越多时,比如几千几万时,通过名字便会越来越难以管理,同时也难以进行去重,很大概率会不断下载重复的视频。
在B站,BV号便是每个视频的“身份证”(主键),因此用其进行视频命名可以方便日后管理,同时也方便进行去重。

代码

'''
author:Ericam
description: 用于将下载下来的b站视频重命名,命名格式为bv号
'''
import os
import difflib

if __name__ == '__main__':

 bvpath = os.path.join("D:/","Coding","python","Python爬虫")
 os.chdir(bvpath)
 d = {}
 '''
 bvdownload.txt里存放bv号与title名
 若之前爬虫爬取了几千个,而唧唧只下载了几百个,便可以将这些已下载的bv和title复制到
 bvdownload.txt中,将已下载的视频进行改名
 '''
 with open("bvdownload.txt",'r',encoding='utf-8')as f:
 lines = f.readlines()
 for val in lines:
  val = val.strip("\n")
  data = val.split("\t")
  bv = data[0]
  title = data[1]
  d[title] = bv

 #视频存放位置
 path = 'F:/bilibili视频/'
 os.chdir(path)
 videoList = os.listdir()

 #开始进行模糊匹配
 for key in d:
 video = difflib.get_close_matches(key,videoList,1, cutoff=0.3)
 if len(video) == 0:
  continue
 video = video[0]
 #检查视频是否已存在,若存在则删除视频
 if os.path.isfile(d[key]+".mp4") and os.path.isfile(video):
  os.remove(video)
 else:
  if os.path.isfile(video):
  os.rename(video,d[key]+".mp4")
 print("重命名完成!")

结果演示

重命名完成的视频列表如下:

到此这篇关于python爬虫搭配起Bilibili唧唧的流程分析的文章就介绍到这了,更多相关python爬虫Bilibili内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)

    准备工作 B站登录页 https://passport.bilibili.com/login python3 pip install selenium (webdriver框架) pip install PIL (图片处理) chrome driver:http://chromedriver.storage.googleapis.com/index.html firefox driver:https://github.com/mozilla/geckodriver/releases B站的滑块验

  • python破解bilibili滑动验证码登录功能

    地址:https://passport.bilibili.com/login 左图事完整验证码图,右图是有缺口的验证码图                                    步骤: 1.准备bilibili账号 2.工具:pycharm selenium chromedriver PIL 3.破解思路: 找到完整验证码和有缺口的验证码图片,然后计算缺口坐标,再利用selenium移动按钮到指定位置,齐活 步骤代码如下: 先导入需要的包和库 from selenium impor

  • python中使用you-get库批量在线下载bilibili视频的教程

    此文章描述的是在windows10系统pc端python环境下,利用you-get库来进行bilibili视频批量下载,是在cmd中操作完成,只建议有python环境的用户使用. 1.安装you-get库,此处需要注意的是you-get的安装不可以用conda命令行安装,刚刚一股脑只想着annoconda的conda命令,浪费了很多时间. pip install you-get 2.安装完成以后,就可以进行视频下载啦! you-get -o 本地存储路径 bilibili视频在线网址 以上是单个

  • Python爬虫 bilibili视频弹幕提取过程详解

    两个重要点 1.获取弹幕的url是以 .xml 结尾 2.弹幕url的所需参数在视频url响应的 javascript 中 先看代码 import requests from lxml import etree import re # 使用手机UA headers = { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like

  • Python爬虫爬取Bilibili弹幕过程解析

    先来思考一个问题,B站一个视频的弹幕最多会有多少? 比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的. 也就是说,有一个视频地址为https://www.bilibili.com/video/av67946325,你如果直接去requests.get这个地址,里面是不会有弹幕的,回想第一篇说到的携程异步加载数据的方式,B站的弹幕也一定是先加载当前视频的界面,然后再异步填充弹幕的. 接下来我们就可以打开火狐浏览器(平常可以火狐谷歌控制台都使用,因为谷歌里面因为插件

  • python爬虫搭配起Bilibili唧唧的流程分析

    前言 最近需要大规模下载B站视频,同时要将下载好的视频用BV号进行重命名,最后上传至服务器.这个工作一开始我是完全手工完成的,通过游猴来下载,可是下载几十个视频还好,再多一点的话真是太烦了,而且生产力低下,因此诞生了编写脚本的想法. 一开始我需要在B站搜索关键词,然后不断点开视频后进行下载,同时在视频下载后还需要找到这个视频来修改BV号,效率实在太低,特别是当下载的视频多了,再返回来寻找它对应的BV号时也是个很繁琐的过程,因此决定进行编写python脚本. 本次的脚本可以大幅度提高工作效率,但是

  • python爬虫爬取bilibili网页基本内容

    用爬虫爬取bilibili网站排行榜游戏类的所有名称及链接: 导入requests.BeautifulSoup import requests from bs4 import BeautifulSoup 然后我们需要插入网站链接并且要解析网站并打印出来: e = requests.get('https://www.bilibili.com/v/popular/rank/game')   #当前网站链接 html = e.content soup = BeautifulSoup(html,'htm

  • Python爬虫小练习之爬取并分析腾讯视频m3u8格式

    目录 普通爬虫正常流程: 环境介绍 分析网站 开始代码 导入模块 数据请求 提取数据 遍历 保存数据 运行代码 普通爬虫正常流程: 数据来源分析 发送请求 获取数据 解析数据 保存数据 环境介绍 python 3.8 pycharm 2021专业版 [付费VIP完整版]只要看了就能学会的教程,80集Python基础入门视频教学 点这里即可免费在线观看 分析网站 先打开开发者工具,然后搜索m3u8,会返回给你很多的ts的文件,像这种ts文件,就是视频的片段 我们可以复制url地址,在新的浏览页打开

  • 使用Python打造一款间谍程序的流程分析

    知识点 这次我们使用python来打造一款间谍程序 程序中会用到许多知识点,大致分为四块 win32API 此处可以在MSDN上查看 Python基础重点在cpytes库的使用,使用方法请点击此处 C语言基础 Hook 程序的基本原理在于通过注册Hook,记录系统事件 那么什么是Hook呢 Hook 技术又叫做钩子函数,系统在调用函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递 注册Hook时我们需要先导入DLL

  • python爬虫用scrapy获取影片的实例分析

    我们平时生活的娱乐中,看电影是大部分小伙伴都喜欢的事情.周围的人总会有意无意的在谈论,有什么影片上映,好不好看之类的话题,没事的时候谈论电影是非常不错的话题.那么,一些好看的影片如果不去电影院的话,在其他地方看都会有大大小小的限制,今天小编就教大家用python中的scrapy获取影片的办法吧. 1. 创建项目 运行命令: scrapy startproject myfrist(your_project_name) 文件说明: 名称 | 作用 --|-- scrapy.cfg | 项目的配置信息

  • python爬虫Scrapy框架:媒体管道原理学习分析

    目录 一.媒体管道 1.1.媒体管道的特性 媒体管道实现了以下特性: 图像管道具有一些额外的图像处理功能: 1.2.媒体管道的设置 二.ImagesPipeline类简介 三.小案例:使用图片管道爬取百度图片 3.1.spider文件 3.2.items文件 3.3.settings文件 3.4.pipelines文件 一.媒体管道 1.1.媒体管道的特性 媒体管道实现了以下特性: 避免重新下载最近下载的媒体 指定存储位置(文件系统目录,Amazon S3 bucket,谷歌云存储bucket)

  • Python爬虫之对CSDN榜单进行分析

    前言 本篇文章的主要内容是利用Python对CSDN热榜变冷榜的指标数据进行分析的爬虫 分析一下各指标 开始爬取热榜,请稍候...耗时:2.199401808s [Top100指标统计] 浏览为0的:        3评论为0的:       76收藏为0的:       51浏览评论0的:    3三指标都0的:    2 浏览个位数的:    25评论个位数的:    98收藏个位数的:    86无封面题图的:    74 浏览>=100的:    18评论>=10的:      1收藏

  • 利用Python爬虫爬取金融期货数据的案例分析

    目录 任务简介 解决步骤 代码实现 总结 大家好 我是政胤今天教大家爬取金融期货数据 任务简介 首先,客户原需求是获取https://hq.smm.cn/copper网站上的价格数据(注:获取的是网站上的公开数据),如下图所示: 如果以该网站为目标,则需要解决的问题是“登录”用户,再将价格解析为表格进行输出即可.但是,实际上客户核心目标是获取“沪铜CU2206”的历史价格,虽然该网站也有提供数据,但是需要“会员”才可以访问,而会员需要氪金...... 数据的价值!!! 鉴于,客户需求仅仅是“沪铜

  • Python爬虫程序架构和运行流程原理解析

    1 前言 Python开发网络爬虫获取网页数据的基本流程为: 发起请求 通过URL向服务器发起request请求,请求可以包含额外的header信息. 获取响应内容 服务器正常响应,将会收到一个response,即为所请求的网页内容,或许包含HTML,Json字符串或者二进制的数据(视频.图片)等. 解析内容 如果是HTML代码,则可以使用网页解析器进行解析,如果是Json数据,则可以转换成Json对象进行解析,如果是二进制的数据,则可以保存到文件做进一步处理. 保存数据 可以保存到本地文件,也

随机推荐