爬取哔哩哔哩小视频

前言:想必大家都对小视频感兴趣吧,今天的爬虫的内容为将哔哩哔哩中的视频下载到本地,今天爬取的网站为

URL : https://vc.bilibili.com/p/eden/all#/?tab=%E5%BE%A1%E5%AE%85%E6%96%87%E5%8C%96&tag=COSPLAY

1. 分析站点

a) 进入网站后,鼠标滚动往下滚动,很明显可以看到这个网站的数据是通过ajax技术动态加载来的,所以第一步做的就是鼠标右键检查,进入Network→XHR,然后刷新页面再次将鼠标往下滚动,会发现在XHR中加载了很多的数据包

b) 找到加载的数据包后第二步要做的就是对这些数据进行分析,找出视频的播放地址及视频的名字,从这些加载的数据中我们找到了视频的播放地址video_playurl和视频的名称description,而且每个请求中都包含30个视频的信息

c) 找到我们保存视频时需要的名称和视频后,下一步就要开始分析返回这些数据的请求url了,最简单的办法就是通过反复点击这两个请求,很容易就可以看到只有next_offset的值在变化。而且所对应的值是30倍数

d) 我们尝试将next_offset的值改为0然后去发送请求,看是不是就是页面最开始的前30个视频的数据,发现就是最开始页面加载的数据,这说明next_offset的初始值为0,所以当我们在代码中请求数据的时候也要从next_offset为0开始发送请求下载视频

2. 上代码

分析完网页是信息后,我们只需要在代码中更改请求的url中的next_offset的值就可以下载不同的视频了,先写好大概的思路,然后再去慢慢完善代码

a) 写好大概的思路

import requests

class DouyinSpider(object):

def __init__(self):

self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'}

self.url = 'https://api.vc.bilibili.com/clip/v1/video/search?page_size=30&need_playurl=0&next_offset={}&has_more=1&order=&tag=COSPLAY&platform=pc'

def parse_json(self,json):

pass

def request_page(self):

count = int(input('请输入你想要爬取的页数,一页30个视频:'))

for i in range(0,count):

response = requests.get(self.url.format(i*30)).json()

self.parse_json(response)

def save_video(self,video_url,title):

pass

def main(self):

self.request_page()

if __name__ == '__main__':

spider = DouyinSpider()

spider.main()

b) 完整代码

import requests,re,os

class DouyinSpider(object):

def __init__(self):

self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36'}

self.url = 'https://api.vc.bilibili.com/clip/v1/video/search?page_size=30&need_playurl=0&next_offset={}&has_more=1&order=&tag=COSPLAY&platform=pc'

# 解析获取的数据,并从中提取出视频的播放地址和视频的名称

def parse_json(self,json):

items = json['data']['items'] # 视频的数据都放在items中,所以要去遍历items

for item in items:

video_url = item['item']['video_playurl'] # 提取出数据中的播放地址和视频的名称

title = item['item']['description']

self.save_video(video_url,title) # 将视频地址和视频名称传给save_video方法

# 发送请求获取数据

def request_page(self):

count = int(input('请输入你想要爬取的页数,一页30个视频:'))

for i in range(0,count):

response = requests.get(self.url.format(i*30)).json() # 将返回的json数据转为python中的数据类型

self.parse_json(response) # 将返回的数据传给parse_json方法

# 保存视频到本地

def save_video(self,video_url,title):

res = requests.get(video_url,headers=self.headers).content # 对视频的播放地址发送请求获取数据,因为视频是二进制数据,所以还需要将返回的数据转为二进制数据然后再去保存,所以这里需要.content

title = re.sub(r'[\,, .。/#!!??@\n\s::————丶*ノヽ*´з]','',title) # 使用re模块中的sub方法将非法的字符转为空字符串,不然保存视频时出错

filename = 'F:/视频/'

if not os.path.exists(filename): # 使用os库中的path模块判断filename路径是否存在,不存在则创建

os.makedirs(filename) # 创建多级目录

with open(filename+'{}.mp4'.format(title),'wb')as f:

f.write(res)

print('已下载{}'.format(title))

def main(self):

self.request_page()

if __name__ == '__main__':

spider = DouyinSpider()

spider.main()

c) 我下载了两页的的视频,下载的结果正好是60个视频,所以验证了我们之前分析的结果没有错误

3. 小思考

你们有没有发现请求url中有一个tag标签,其实可以通过改变tag标签就可以下载御宅文化中其它类型的视频

结语:今天的内容到这里就结束了,如果大家觉得文章还不错或者代码还可以怎么改进的话,可以在下方留言告诉我,我都会汲取大家的意见并和大家一起学习成长。

原文链接:https://blog.csdn.net/weixin_46146855/article/details/105813137

python爬取哔哩哔哩视频_荐爬取哔哩哔哩中的cosplay小视频相关推荐

  1. python抓取抖音热门视频_用于抓取抖音热门视频和音乐的API

    注:项目已不可用... DouYin API of DouYin App for humans. Installation pip3 install douyin Usage Here is the ...

  2. python3爬取网易云歌单数据清洗_网页抓取网易云音乐及评论数据分析

    网页抓取网易云音乐及评论数据分析 游贤 成都理工大学信息科学与技术学院 [摘 要] 摘要:为了分析网易云音乐中哪些歌曲是热门歌曲,哪些歌曲的评论 最多,从而了解到人们对于不同音乐类型的喜爱程度,采用成 ...

  3. python 控制鼠标点击需要100ms为什么_用 Python3 和 OpenCV 替我玩一玩微信小游戏 — 跳一跳 (这算外挂么)...

    0 瞎弄 我知道你们喜欢先看效果 手残的我,始终跳不过你们这些超过 50 分的大佬.想起最近在用 Python 学习 ML (Mechine Learning, 机器学习) ,怎么用没学会,倒是里面神 ...

  4. python爬虫淘宝和天猫的区别_荐真实难过,当python爬虫对上淘宝和天猫,我又失败了!...

    我从来没想过淘宝天猫的反扒机制这么强,随着学习的推进,我用上了selenium,开始爬取这些网站,然后我输很彻底,下面我讲一下我失败的最后倔强! 果然学习不会顺水成舟,该碰壁还是得碰壁,我拿着18年的 ...

  5. 卷毛机器人抢大龙视频_腾讯这一措施,又砸碎了一些小企业的饭碗,QQ机器人成为历史...

    腾讯最近又开始搞"骚动作",第三方QQ机器人已经停止运营,包括晨风.酷Q.契约.mpq.乾坤.oneQQ.lightQQ.miral, 没想到,我最爱的酷Q也停止了,本来还打算再做 ...

  6. mysql存储音频视频文件_如何在mysql 或者 其他的数据库中存放图片 音频 视频

    root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i".jp ...

  7. 谷歌play商店_如何在Android的Google Play商店中禁用自动播放视频

    谷歌play商店 Justin Duino 贾斯汀·杜伊诺(Justin Duino) Does anyone like autoplaying videos? I know I don't. Goo ...

  8. java多线程基础视频_【No996】2020年最新 Java多线程编程核心基础视频课程

    01.课程介绍.mp4 02.多线程编程基础-进程与线程.mp4 03.多线程编程基础-使用多线程-继承Thread类.mp4 04.多线程编程基础-使用多线程-实现Runnable接口.mp4 05 ...

  9. 探花交友_第6章_完善小视频功能以及即时通讯

    探花交友_第6章_完善小视频功能以及即时通讯 文章目录 探花交友_第6章_完善小视频功能以及即时通讯 1.视频点赞 1.1.dubbo服务 1.2.APP接口服务 1.2.1.VideoControl ...

最新文章

  1. early EOF fatal: index-pack failed
  2. netmiko 自动判断设备类型python_Python模块-Netmiko入门
  3. 测试开发工程师技能图谱
  4. pom 的第三方jar报错_01_maven-将第三方jar包一起打包到项目 jar 包中
  5. 次数统计-CountMap
  6. Leetcode算法题(C语言)10--两数之和
  7. 不用于mysql权限管理的24260_[MySQL Reference Manual] 24 MySQL sys框架
  8. Weaveworks增加发布自动化和事件管理
  9. 计算机组成原理—虚拟存储器的分类
  10. hardmard积 用什么符号表示_[关于数学哲学的科普]为数学学习准备的基础数理逻辑(用自然推理系统展现的命题演算以及一阶谓词演算)...
  11. 华为路由器内部服务器地址映射不起作用,第一次买华为AR2204-s路由,内部服务器映射问题...
  12. 临时表空间和数据表空间
  13. SSM+Vue音乐在线试听网站系统java项目源码
  14. html文件用excel打开乱码,都是兼容惹的祸 用excel打开xls文件出现乱码的解决方法...
  15. 天珣系统查找计算机登陆,天珣内网安全风险管理与审计系统
  16. oracle11g64为的安装,PLSQL Developer连接不上Win7 64为系统下安装的Oracle11g64位的解决办法...
  17. 电容降压 20170619 周一
  18. 干货 实例 | 数字化时代的传统行业转型升级
  19. CSS模块化基本思想
  20. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

热门文章

  1. 自己开发开源jquery插件--给jquery.treeview加上checkbox
  2. Echo团队Alpha冲刺随笔 - 第九天
  3. java运算符-逻辑、三元运算符
  4. Luogu P1087 FBI树
  5. centos删除系统自带的httpd
  6. HTTP协议Etag详解
  7. Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW
  8. Roadsend PHP-开源的PHP代码编译器
  9. 设计模式之C#实现---Builder
  10. 将模式对话框的返回值回送(PostBack)到服务端