python爬虫实例(一) b站篇

  • 一、代码
  • 二、注意事项
    • 1. 视频格式:m4s,flv,mp4
      • 1. m4s:
      • 2. flv:
      • 3. mp4
      • 4. 概述
    • 2. blob
  • 三、思路
  • 总结

一、代码

import requests
import os, sys
from lxml import etree
from multiprocessing.dummy import Pool
from requests.packages.urllib3.exceptions import InsecureRequestWarningrequests.packages.urllib3.disable_warnings(InsecureRequestWarning)def get_cid(video):# 获取cidvideo_json = requests.get(url=video["cid_url"].format(video["bvid"]), headers=video["cid_header"]).json()detail = video_json['data'][0]video["cid"] = detail['cid']video["name"] = detail['part'].replace(' ', '_') + '.mp4'video["duration"] = detail["duration"]def get_videourl(video):# 获取视频的url(mp4格式)video["video_header"]["host"] = video["video_url"].split('/')[2]video_json = requests.get(url=video["video_url"].format(video["bvid"], video["cid"]),headers=video["video_header"]).json()durl = video_json['data']['durl'][0]video["size"] = durl['size']video["video_url"] = durl['url']video["length"] = durl['length']def get_download(video):size = 0video["video_header"]["host"] = video["video_url"].split('/')[2]response = requests.get(url=video["video_url"], headers=video["video_header"], stream=True, verify=False)chunk_size = 1024content_size = int(response.headers['content-length'])if response.status_code == 200:sys.stdout.write(video["name"] + '   [文件大小]:%0.2f MB\n' % (content_size / chunk_size / 1024))with open("D:\\python_file\\" + video["name"], 'wb') as file:for data in response.iter_content(chunk_size=chunk_size):file.write(data)size += len(data)file.flush()sys.stdout.write(video["name"] + '  [下载进度]:%.2f%%' % float(size / content_size * 100) + '\r')if size / content_size == 1:print('\n')else:print('下载出错')if __name__ == '__main__':# 进程池开4个大小pool = Pool(4)# bvid列表bvid_list = ["BV17E411o7ye"]videos = []for bvid in bvid_list:data = {"cid": "","bvid": bvid,"name": "","duration": "","length": "","size": "","cid_url": "https://api.bilibili.com/x/player/pagelist?bvid={}&jsonp=jsonp","video_url": "https://api.bilibili.com/x/player/playurl?bvid={}&cid={}&qn=80&type=&otype=json&fnval=1",# 公共部分可以提到外面"cid_header": {"host": "api.bilibili.com","User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400"},"video_header": {"host": "","Origin": "https://www.bilibili.com","Referer": "https://www.bilibili.com/video/" + bvid,"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400"}}videos.append(data)pool.map(get_cid, videos)pool.map(get_videourl, videos)for i in videos:print("name:{0}   duration:{1}s  下载地址:D:\\python_file\\{2}".format(i["name"], i["duration"], i["name"]))pool.map(get_download, videos)

二、注意事项

1. 视频格式:m4s,flv,mp4

1. m4s:

2. flv:

3. mp4

就是很正经的那个mp4了

4. 概述

也就是说现在网页播放视频大部分都是flv格式,然后又把flv切片成好多m4s?

2. blob

Blob URL只能由浏览器在内部生成。URL.createObjectURL()将创建一个特殊的Blob或File对象的引用,以后可以使用它来发布URL.revokeObjectURL()。这些URL只能在浏览器的单个实例中和同一个会话中(即页面/文档的生命周期)在本地使用。

Blob URL / Object URL是一种伪协议,允许Blob和File对象用作图像,下载二进制数据链接等的URL源。

最早是数据库直接用Blob来存储二进制数据对象,这样就不用关注存储数据的格式了。在web领域,Blob对象表示一个只读原始数据的类文件对象,虽然是二进制原始数据但是类似文件的对象,因此可以像操作文件对象一样操作Blob对象。

三、思路

先现在网页里找,看能不能找到视频下载地址

之后就发现了这么一串东西,然后去搜blob发现这是个新的知识点,然后后面的网址也用不了

于是我选择去抓包了

我先去找第一个包,发现他的响应就是一个页面而已,没有参考价值,于是继续寻找有用的信息

之后我发现了这种m4s格式的请求,然后去搜一下,发现这是视频格式,大胆猜测,这就是我要找的视频,但是这些请求太分散了,我根本抓不住,只能继续找其他的包

然后我就找到了这个,他的响应是json,里面放了很多m4s文件的url

其实这个时候即可以大胆猜测了,这就是我之前发现的那些m4s格式请求的url

用json转换工具破解一下,就是这样了

所以现在的问题就变成了,如何获取这请求头的url

经过寻找资料和以往知识,我大概知道了这些参数都是什么意思

接下来的问题就是寻找cid了,所以继续往下找

经过不懈努力,终于找到了这个,他的返回是json,其中就有cid

也就是,我可以通过bvid找到cid,然后再构造参数,获取视频url

然后就有下一个问题了,我确实获得了视频m4s文件的url,不过这么多m4s文件,我也不会分析(太菜了

于是继续百度,发现可以通过fnval这个参数,改变返回的视频格式类型,所以在构造参数的时候,我让fnval=1,就可以直接获取mp4格式的视频了

之后就是下载操作了

总结

python爬虫实例(一) b站篇相关推荐

  1. python爬虫实例-记录一次简单的Python爬虫实例

    本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...

  2. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  3. Python爬虫实例(3)--BeautifulSoup的CSS选择器

    Python爬虫实例 紧接着上一讲的内容. 我们初步了解了bs4这个解析库. 但是bs4难道只有find,find_all了吗? 如果层次比较深,相似的元素比较多,和可能会写的比较长. 最主要的是很难 ...

  4. python爬虫实例教程之豆瓣电影排行榜--python爬虫requests库

    我们通过requests库进行了简单的网页采集和百度翻译的操作,这一节课我们继续进行案例的讲解–python爬虫实例教程之豆瓣电影排行榜,这次的案例与上节课案例相似,同样会涉及到JSON模块,异步加载 ...

  5. python爬虫实例之——多线程爬取小说

    之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...

  6. Python爬虫实例(1)--requests的应用

    Python爬虫实例(1) 我们在接下来的爬虫实例(1)里面将逐步的循序渐进的介绍爬虫的各个步骤. 已及时用到的工具,以及具体情况下的用法. 我们的任务是这样的: 爬取<修真聊天群>小说的 ...

  7. python爬虫实例之小说爬取器

    今天和大家分享一个爬取盗版小说的实例. 如今的网络小说可谓是百家齐放各领风骚,玄幻科幻穿越修仙都市- 各种套路看得我是心潮澎湃,笔者曾经也蛮喜欢看小说的,以前经常是拿着一台诺基亚看到深夜,第二天带着黑 ...

  8. Python爬虫实例--新浪热搜榜[xpath语法]

    Python爬虫实例--新浪热搜榜[xpath语法] 1.基础环境配置: requests-->版本:2.12.4 lxml-->版本:3.7.2 2.网页分析 很容易从html源码中看到 ...

  9. Python爬虫实例--新浪热搜榜[正则表达式]

    Python爬虫实例--新浪热搜榜[正则表达式] 1.基础环境配置: requests-->版本:2.12.4 re-->:Python自带,无需安装 2.网页分析 很容易从html源码中 ...

  10. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

最新文章

  1. 电脑端京东的我的订单html+css页面_什么是前端和后端开发?写给即将迈入前端开发领域的朋友...
  2. java的classpath是什么_JAVA初学者classpath设置情况是什么?
  3. 计算机类农学类牧医类,考生注意!2017年高考报考类别确定
  4. 德 梅齐里亚克的砝码问题matlab,德梅齐里亚克砝码问题之解
  5. 联想王传东回应“宁愿放弃5G也不选华为”言论:纯属谣言
  6. java 开发人员工具_Java开发人员应该知道的5种错误跟踪工具
  7. php垃圾回收算法分代,PHP的垃圾回收机制代码实例讲解
  8. R语言在大气污染数据分析中的应用-时间序列分析(一)
  9. 生产级mysql双写_生产级Mysql物理全量备份-Xtrabackup
  10. javascript 动态选中option
  11. 推荐10款最好的Python开发编辑器
  12. 破解tomcat管理员密码
  13. [文章] 小本本记下来--CC
  14. 解决U8库龄分析报表数量与实际结存数量不一致问题
  15. Photoshop 2023 支持 M1 Mac下载
  16. 全面解析流式大数据实时处理技术、平台及应用
  17. python 十进制转二进制
  18. html控件透明与背景透明
  19. import 出现 Illegal instruction错误
  20. 怀念吗?那年下课回宿舍的日子

热门文章

  1. 电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 等等旧的无线电波段划分中L、S、C、X、Ku、Ka、W波段频率分为分别是多少? 这种划
  2. Java面试宝典(超级详细)
  3. 现在还有人玩暗黑2吗?
  4. VA_X 飘云阁过期后的处理办法
  5. 鸡肋的 Nero BurnLite 10
  6. python万年历代码带解释_带闹钟的单片机万年历代码说明(详细注释)
  7. html模板原型,政务管理系统原型模板分享
  8. 应聘游戏策划是否该将完整策划案给面试官看
  9. 用计算机制作贺卡,用计算机制作贺卡的操作步骤
  10. 概率论与数理统计 第四版 浙江大学 盛骤,谢式千,潘承毅 个人阅读笔记