Python爬虫学习教程 bilibili网站视频爬取!【附源码】

Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python?

通过爬取b站案例带领你快速掌握爬虫,掌握学习技巧~带你揭开编程最神秘的面纱,解决学习路上的迷惑·~

对于初学者在学习Python过程中有不懂的或是缺少这方面学习教程的可以加一下我建的Python技术的学习裙;九三七六六七五零九,一起学习。群里有相关开发工具,学习教程,每天还有专业的老司机在线直播分享知识与技术答疑解惑!

项目源码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : spider_bilibili_v2.py
# @Author: 未衬

# 它可以模拟浏览器向网站发送一个请求[命令]
import requests

'''
编写爬虫的过程中 有两种写法

    基于html去分析网页数据并删选
        因为有些同学没有接触过前端 可能看不懂前端代码

    ** 使用浏览器去分析这个网站的接口 [api] 找到它之后利用
        requests去请求这个api 拿到api的数据[json] 字典 基本数据结构 
        利用字典的特性去获取字典中的数据并下载
        
        
        json
        
        requests 
        
        mysql
        网页选择器
            xpath
            bs4
            
            pyquery
            
        scrapy
            公司开发爬虫是基于框架去实现功能的
                敏捷开发 快速
                安全 信任的 能解决公司大多数的爬虫问题
                
        redis
            分布式系统
            scrapy-redis 分布式爬虫
                在多个服务器上部署多个爬虫去爬取同一目标
                redis 快 
'''


# 去获取api 利用requests去访问这个接口 模拟浏览器
# 禁止非浏览器访问的代码 一律禁止访问

# 400 403 全是错误 访问错误 哔哩哔哩这家公司导致
# 防止爬虫去过度的向服务器发请求 哔哩哔哩的后台服务器会出现过载的情况

def get_json(url):
    # 伪装成浏览器向这个接口拿数据 作用域
    headers = {
        'User-Agent':
            'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    }

    # 分析api这个链接
        # 在api中 会有一些关键字
        # 如果这些关键字改变的话 那它返回的值也是不一样的

    params = {
        'page_size': 10,
        'next_offset': str(num),
        'tag': '今日热门',
        'platform': 'pc',
    }



    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 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    }

    # 取变量名一定见名起意
    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('下载成功...')

            except BaseException:
                print('下载失败...')


'''

运行结果

 

代码不要直接复制,要自己动手敲,学习Python一定要多动手!

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值