Python爬哔哩哔哩的小视频

呃呃,这个好像用处不怎么大,就当玩一玩,直接看代码,代码中有不少注释html

# -*- coding: utf-8 -*- 
# 它能够模拟浏览器向网站发送一个请求[命令]
import requests
'''
编写爬虫的过程当中
    基于html去分析网页数据并删选
    ** 使用浏览器去分析这个网站的接口 [api] 找到它以后利用
        requests去请求这个api 拿到api的数据[json] 字典 基本数据结构 
        利用字典的特性去获取字典中的数据并下载
'''
# 去获取api 利用requests去访问这个接口 模拟浏览器
# 禁止非浏览器访问的代码 一概禁止访问
# 防止爬虫去过分的向服务器发请求 哔哩哔哩的后台服务器会出现过载的状况
def get_json(url):
    # 假装成浏览器向这个接口拿数据 做用域
    #headers 是请求头
    headers = {
        'User-Agent':
            'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'
    }
    # 分析api这个连接
        # 在api中 会有一些关键字
        # 若是这些关键字改变的话 那它返回的值也是不同的
    #构建api关键字参数
    params = {
        'page_size': 10,
        #动态参数
        'next_offset': str(num),
        'tag': '今日热门',
        'platform': 'pc',
    }
    #请求api的数据
    try:
        # 获取api的全部数据
        html = requests.get(url, params=params, headers=headers)
        return html.json()
    except BaseException:
        print('请求失败...')
def downloader(url, path):
    # 初始化参数 当你在下载视频的时候 0kb开始一直到这个视频的总大小 在下载以前咱们要定义这个视频
    # 大小的参数
    size = 0
    # 假装成浏览器向这个接口拿数据
    headers = {
        'User-Agent':
            'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'
    }
    # 取变量名必定见名起意
    response = requests.get(url, headers=headers, stream=True)
    # socket 作下载 IO流 每次下载的数据大小 以1024做为一个节点
    chunk_size = 1024
    # 视频总大小 在python中是字典格式
    content_size = int(response.headers['content-length'])
    print(content_size)
    if response.status_code == 200:
        print('[文件大小]: %0.2f MB' % (content_size / chunk_size / 1024))
        with open(path, 'wb') as file:
            # 迭代响应数据
            for data in response.iter_content(chunk_size=chunk_size):
                file.write(data)
                size += len(data)
# 入口函数
if __name__ == "__main__":
    for i in range(10):
        url = 'http://api.vc.bilibili.com/board/v1/ranking/top?'
        # 翻页的值 动态的 11 21 31
        num = i * 10 + 1
        html = get_json(url)
        infos = html['data']['items']
        for info in infos:
            # 小视频的标题
            title = info['item']['description']
            # 小视频的下载连接
            video_url = info['item']['video_playurl']
            print(title)
            try:
                downloader(video_url, path='./视频/%s.mp4' % title)
                print('下载成功...')

下图是怎样在浏览器上获取"User-Agent":,你必需要打开你要爬取东西的页面上才行
在这里插入图片描述
还须要获取正确的api,点击左侧域名中有api的,若是右侧出现和图中差很少就是正确的api
在这里插入图片描述python