当前位置:   article > 正文

Python:爬取B站TOP100热门视频数据并保存为CSV_python 抓取 b站 代码

python 抓取 b站 代码

目录

一、效果呈现

二、讲解

1. 发送请求并获取数据

2. 提取视频信息

3. 保存为CSV文件

三、完整代码


一、效果呈现

二、讲解

1. 发送请求并获取数据

        首先,我们需要定义B站热门视频API的URL,并设置请求头以模拟浏览器访问。这样可以避免被识别为爬虫并提高请求的成功率。

  1. import requests
  2. import json
  3. import pandas as pd
  4. # 定义B站热门视频API的URL
  5. url = 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
  6. # 定义请求头,模拟浏览器访问
  7. headers = {
  8. 'Referer': 'https://www.bilibili.com/v/popular/rank/all/',
  9. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0'
  10. }
  11. # 发送GET请求到B站API并获取响应
  12. response = requests.get(url, headers=headers)
  13. # 解析响应内容为JSON格式
  14. data = json.loads(response.text)

2. 提取视频信息

        从响应数据中,我们可以提取出视频列表,并初始化一些列表来存储视频的详细信息。(这里的各类数据可以按你自己的需求进行选择)

  1. # 从响应数据中提取视频列表
  2. video_list = data['data']['list']
  3. # 初始化空列表以存储视频信息
  4. rank_list = [] # 排行
  5. title_list = [] # 视频标题
  6. play_cnt_list = [] # 播放数
  7. danmu_cnt_list = [] # 弹幕数
  8. coin_cnt_list = [] # 投币数
  9. like_cnt_list = [] # 点赞数
  10. share_cnt_list = [] # 分享数
  11. favorite_cnt_list = [] # 收藏数
  12. author_list = [] # 作者
  13. video_url = [] # 视频地址
  14. # 遍历视频列表并提取每部视频的信息
  15. for idx, video in enumerate(video_list):
  16. rank_list.append(idx + 1) # 添加视频排行
  17. title_list.append(video['title']) # 添加视频标题
  18. play_cnt_list.append(video['stat']['view']) # 添加播放数
  19. danmu_cnt_list.append(video['stat']['danmaku']) # 添加弹幕数
  20. coin_cnt_list.append(video['stat']['coin']) # 添加投币数
  21. like_cnt_list.append(video['stat']['like']) # 添加点赞数
  22. share_cnt_list.append(video['stat']['share']) # 添加分享数
  23. favorite_cnt_list.append(video['stat']['favorite']) # 添加收藏数
  24. author_list.append(video['owner']['name']) # 添加作者名称
  25. video_url.append(f'https://www.bilibili.com/video/{video["bvid"]}') # 添加视频地址

3. 保存为CSV文件

        最后,我们使用'pandas'库创建一个DataFrame,并将所有提取的数据存储在这个DataFrame中。然后,我们将这个DataFrame保存为CSV文件。

  1. # 使用pandas创建DataFrame,准备存储所有提取的数据
  2. df = pd.DataFrame({
  3. '排行': rank_list,
  4. '视频标题': title_list,
  5. '视频地址': video_url,
  6. '作者': author_list,
  7. '播放数': play_cnt_list,
  8. '弹幕数': danmu_cnt_list,
  9. '硬币数': coin_cnt_list,
  10. '点赞数': like_cnt_list,
  11. '分享数': share_cnt_list,
  12. '收藏数': favorite_cnt_list,
  13. })
  14. # 将DataFrame保存为CSV文件,不包含索引,使用utf_8_sig编码
  15. df.to_csv('B站TOP100.csv', index=False, encoding="utf_8_sig")

三、完整代码

  1. import requests # 导入requests库以发送HTTP请求
  2. import json # 导入json库以处理JSON数据
  3. import pandas as pd # 导入pandas库以创建和操作数据表格
  4. # 定义B站热门视频API的URL
  5. url = 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
  6. # 定义请求头,模拟浏览器访问
  7. headers = {
  8. 'Referer': 'https://www.bilibili.com/v/popular/rank/all/',
  9. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0'
  10. }
  11. # 发送GET请求到B站API并获取响应
  12. response = requests.get(url, headers=headers)
  13. # 解析响应内容为JSON格式
  14. data = json.loads(response.text)
  15. # 从响应数据中提取视频列表
  16. video_list = data['data']['list']
  17. # 初始化空列表以存储视频信息
  18. rank_list = [] # 排行
  19. title_list = [] # 视频标题
  20. play_cnt_list = [] # 播放数
  21. danmu_cnt_list = [] # 弹幕数
  22. coin_cnt_list = [] # 投币数
  23. like_cnt_list = [] # 点赞数
  24. share_cnt_list = [] # 分享数
  25. favorite_cnt_list = [] # 收藏数
  26. author_list = [] # 作者
  27. video_url = [] # 视频地址
  28. # 遍历视频列表并提取每部视频的信息
  29. for idx, video in enumerate(video_list):
  30. rank_list.append(idx + 1) # 添加视频排行
  31. title_list.append(video['title']) # 添加视频标题
  32. play_cnt_list.append(video['stat']['view']) # 添加播放数
  33. danmu_cnt_list.append(video['stat']['danmaku']) # 添加弹幕数
  34. coin_cnt_list.append(video['stat']['coin']) # 添加投币数
  35. like_cnt_list.append(video['stat']['like']) # 添加点赞数
  36. share_cnt_list.append(video['stat']['share']) # 添加分享数
  37. favorite_cnt_list.append(video['stat']['favorite']) # 添加收藏数
  38. author_list.append(video['owner']['name']) # 添加作者名称
  39. video_url.append(f'https://www.bilibili.com/video/{video["bvid"]}') # 添加视频地址
  40. # 使用pandas创建DataFrame,准备存储所有提取的数据
  41. df = pd.DataFrame({
  42. '排行': rank_list,
  43. '视频标题': title_list,
  44. '视频地址': video_url,
  45. '作者': author_list,
  46. '播放数': play_cnt_list,
  47. '弹幕数': danmu_cnt_list,
  48. '硬币数': coin_cnt_list,
  49. '点赞数': like_cnt_list,
  50. '分享数': share_cnt_list,
  51. '收藏数': favorite_cnt_list,
  52. })
  53. # 将DataFrame保存为CSV文件,不包含索引,使用utf_8_sig编码
  54. df.to_csv('B站TOP100.csv', index=False, encoding="utf_8_sig")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/707945
推荐阅读
相关标签
  

闽ICP备14008679号