Python爬虫学习教程 bilibili网站视频爬取!【附源码】
程序员文章站
2022-06-27 20:19:19
Python爬虫学习教程,通过爬取b站案例带领你快速掌握爬虫,掌握学习技巧~带你揭开编程最神秘的面纱,解决学习路上的迷惑·~ ......
python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python?
通过爬取b站案例带领你快速掌握爬虫,掌握学习技巧~带你揭开编程最神秘的面纱,解决学习路上的迷惑·~
对于初学者在学习python过程中有不懂的或是缺少这方面学习教程的可以加一下我建的python技术的学习裙;九三七六六七五零九,一起学习。群里有相关开发工具,学习教程,每天还有专业的老司机在线直播分享知识与技术答疑解惑!
项目源码
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一定要多动手!