欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-27 20:19:19
Python爬虫学习教程,通过爬取b站案例带领你快速掌握爬虫,掌握学习技巧~带你揭开编程最神秘的面纱,解决学习路上的迷惑·~ ......

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

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

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

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

项目源码

  1 #!/usr/bin/env python
  2 # -*- coding: utf-8 -*-
  3 # @file  : spider_bilibili_v2.py
  4 # @author: 未衬
  5 
  6 # 它可以模拟浏览器向网站发送一个请求[命令]
  7 import requests
  8 
  9 '''
 10 编写爬虫的过程中 有两种写法
 11 
 12     基于html去分析网页数据并删选
 13         因为有些同学没有接触过前端 可能看不懂前端代码
 14 
 15     ** 使用浏览器去分析这个网站的接口 [api] 找到它之后利用
 16         requests去请求这个api 拿到api的数据[json] 字典 基本数据结构 
 17         利用字典的特性去获取字典中的数据并下载
 18         
 19         
 20         json
 21         
 22         requests 
 23         
 24         mysql
 25         网页选择器
 26             xpath
 27             bs4
 28             
 29             pyquery
 30             
 31         scrapy
 32             公司开发爬虫是基于框架去实现功能的
 33                 敏捷开发 快速
 34                 安全 信任的 能解决公司大多数的爬虫问题
 35                 
 36         redis
 37             分布式系统
 38             scrapy-redis 分布式爬虫
 39                 在多个服务器上部署多个爬虫去爬取同一目标
 40                 redis 快 
 41 '''
 42 
 43 
 44 # 去获取api 利用requests去访问这个接口 模拟浏览器
 45 # 禁止非浏览器访问的代码 一律禁止访问
 46 
 47 # 400 403 全是错误 访问错误 哔哩哔哩这家公司导致
 48 # 防止爬虫去过度的向服务器发请求 哔哩哔哩的后台服务器会出现过载的情况
 49 
 50 def get_json(url):
 51     # 伪装成浏览器向这个接口拿数据 作用域
 52     headers = {
 53         'user-agent':
 54             'mozilla/5.0 (x11; linux x86_64) applewebkit/537.36 (khtml, like gecko) chrome/69.0.3497.100 safari/537.36'
 55     }
 56 
 57     # 分析api这个链接
 58         # 在api中 会有一些关键字
 59         # 如果这些关键字改变的话 那它返回的值也是不一样的
 60 
 61     params = {
 62         'page_size': 10,
 63         'next_offset': str(num),
 64         'tag': '今日热门',
 65         'platform': 'pc',
 66     }
 67 
 68 
 69 
 70     try:
 71         # 获取api的所有数据
 72         html = requests.get(url, params=params, headers=headers)
 73         return html.json()
 74     except baseexception:
 75         print('请求失败...')
 76 
 77 
 78 def downloader(url, path):
 79     # 初始化参数 当你在下载视频的时候 0kb开始一直到这个视频的总大小 在下载之前我们要定义这个视频
 80     # 大小的参数
 81     size = 0
 82 
 83     # 伪装成浏览器向这个接口拿数据
 84     headers = {
 85         'user-agent':
 86             'mozilla/5.0 (x11; linux x86_64) applewebkit/537.36 (khtml, like gecko) chrome/69.0.3497.100 safari/537.36'
 87     }
 88 
 89     # 取变量名一定见名起意
 90     response = requests.get(url, headers=headers, stream=true)
 91 
 92 
 93     # socket 做下载 io流 每次下载的数据大小 以1024作为一个节点
 94     chunk_size = 1024
 95 
 96     # 视频总大小 在python中是字典格式
 97     content_size = int(response.headers['content-length'])
 98     print(content_size)
 99 
100     if response.status_code == 200:
101         print('[文件大小]: %0.2f mb' % (content_size / chunk_size / 1024))
102 
103         with open(path, 'wb') as file:
104             # 迭代响应数据
105             for data in response.iter_content(chunk_size=chunk_size):
106                 file.write(data)
107                 size += len(data)
108 
109 # 入口函数
110 if __name__ == "__main__":
111     for i in range(10):
112         url = 'http://api.vc.bilibili.com/board/v1/ranking/top?'
113         # 翻页的值 动态的 11 21 31
114         num = i * 10 + 1
115 
116         html = get_json(url)
117         infos = html['data']['items']
118 
119         for info in infos:
120             # 小视频的标题
121             title = info['item']['description']
122 
123             # 小视频的下载链接
124             video_url = info['item']['video_playurl']
125 
126             print(title)
127 
128             try:
129                 downloader(video_url, path='./视频/%s.mp4' % title)
130                 print('下载成功...')
131 
132             except baseexception:
133                 print('下载失败...')
134 
135 
136 '''

运行结果

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

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

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