呃呃,这个好像用处不怎么大,就当玩一玩,直接看代码,代码中有不少注释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