提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一.数据来源分析
- 明确需求: 明确采集的网站以及数据内容
-网址: https: / /www. bilibili.com/ video/ BV12J411X7cD/
-数据:评论相关内容 - 抓包分析: 浏览器自带工具(开发者工具) 抓包
-
打开开发者工具:F12/右键点击检查选择network(网络)
-
点击最新评论<栏 目>、或者是刷新网页/点击下一页/点击数据加载
-通过关键字找到对应的数据内容
-如何找到对应数据包地址:
I.如果返回数据包比较少,可以选择一个一个数据包点击去查看数据
II.通过关键字去搜索找到对应数据包(极 力推荐)
数据包地址:https://api.bilibili.com/x/v2/reply/wbi/main
二.代码实现步骤
1.发送请求=》模拟浏览器对于urL发送请求
User-Agent: url 都在headers里方方法与Cookie一样
# 导入数据请求模块 < 需要安装 pip install requests>
import requests
# 模拟浏览器:请求头(字典)
headers = {
"Cookie": "buvid3=9A2355CE-E6B3-DCAF-B575-9839FC979FA719500infoc; b_nut=1702901019; CURRENT_FNVAL=4048; _uuid=C99D1D5F-8FD9-6DB9-E31010-7D38210B986DD22387infoc; buvid4=EEE01603-48D1-866E-6EE9-E4571883993022010-023121812-; buvid_fp=1ac5190dd0cf1d0ae04f418fafa81b4b; rpdid=|(u~)RukJRk)0J'u~|km|u|k~; DedeUserID=506964705; DedeUserID__ckMd5=1840c278a76d6edc; bp_video_offset_506964705=876770101210120230; PVID=1; b_lsid=5321FB87_18C96037762; share_source_origin=copy_web; bsource=share_source_copylink_web; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDM1ODMwNzAsImlhdCI6MTcwMzMyMzgxMCwicGx0IjotMX0.kfffdTm4Ttyn4GR7YgQ9UZjhIT4F885uOttcCV1MMJc; bili_ticket_expires=1703583010; SESSDATA=74d99460%2C1718875875%2C885a3%2Ac1CjBeIkflpw3PKL2vFAomqOEQyuARtJu9jzvNTqeNPfodxsJUEFbBCc3fkmatEyPT0-8SVnNSUXpsbkRoVTRkZjFGYjBYN2k1VmxqNmZEcHJWb1RvYVRrUlRVeWtvOXBodXlaLXN0MGFNY3JCT09taDBjckhhLWNHS0JCYXB2UWZhSFNUWGpjMGxnIIEC; bili_jct=660c419519ab53cbbcd4d1ee4129138d; sid=dpvx31cm",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
#请求网址
url = 'https://api.bilibili.com/x/v2/reply/wbi/main?oid=910839520&type=1&mode=2&pagination_str=%7B%22offset%22:%22%7B%5C%22type%5C%22:3,%5C%22direction%5C%22:1,%5C%22Data%5C%22:%7B%5C%22cursor%5C%22:937%7D%7D%22%7D&plat=1&web_location=1315875&w_rid=1aaa0be6343c16a5b7e072061fa193f0&wts=1703325678'
#发送请求
response = requests.get(url = url,headers=headers)
2.获取数据=》服务器返回的响应数据<整个返回的内容>
回忆下知识点
- response.json()获取响应json数据
<当你看到响应返回内容{}包裹起来的数据>
response.text获取响应文本数据
<html文件格式 其他内容> - response.content获取响应二进制数据
<保存图片/音频/视频/特定格式文件 数据时候使用>
3.解析数据=》提取需要的数据
'''
3.解析数据 -> 提取需要的数据
字典取值:键值对取值
根据冒号左边的内容[键],提取冒号右边的内容[值]
'''
#查看数据所在列表
#print(json_data['data']['replies'])
#提取数据所在列表
replies = json_data['data']['replies']
# 提取每条数据内容:for循环遍历
for index in replies:
#print(index)#查看数据每条内容
#评论内容
#print(index['content']['message'])#评论预览测试
message = index['content']['message']#评论
Like = index['like'] # 点赞
name = index['member']['uname'] # 昵称
sex = index['member']['sex'] # 性别
Location = index['reply_control']['location'] # 属地
time_desc =index['reply_control']['time_desc'] #发布时间
dit = {
'昵称':name,
'性别':sex,
'IP' :Location,
'时间':time_desc,
'评论' : message,
'点赞': Like,
}
print(dit)
4.保存数据=》保存表格文件中
#保存数据
"创建文件对象,保存数据内容"""
f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'昵称',
'性别',
'IP',
'时间',
'评论',
'点赞',
])
csv_writer.writeheader()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
5.实现多页爬取
过滤掉多余的数据包显示
一般情况是寻找不同页的相同规律
发现主要的变化规律
pagination_str:
下一个参数,来自于上一页的响应数据里面
w_rid: 需要JS逆向
MD5(Ut + ct)