目录
一、基础部分代码实现
四、text_raw 是字符串要加单引号,但是 0 是整数不用单引号# 最后用类似于数组的方式访问print(response.json()['data'][0]['text_raw'])
运行一下

可以看到我们顺利取到了第一条评论的内容
4.3 取出所有评论内容
接下来我们将所有的评论内容都取出来,但是我们也不能一条一条写01234,所以,这里我们会用到循环
import requests# 请求头headers = { # 用户身份信息 'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==', # 防盗链 'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb', # 浏览器基本信息 'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'}url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'# 1.发送请求response = requests.get(url=url,headers=headers)# 2.打印网页数据# 定义一个json_data来存储 response.json()的数据json_data = response.json()# 定义一个data_list取出所有data中的数据data_list = json_data['data']# 定义一个data数据,让它便利data_list里面的对象# 这里怎么理解呢,data_list看作一个数组,我让data等于数组的第一个数# 然后执行操作,执行完之后返回for,我们再另data等于数组的第二个数执行操作# 循环往复for data in data_list: # 这里 data 代表着 data_list的第一个数也就是 ['data'][0] text_raw = data['text_raw'] print(text_raw)
运行一下

4.4 格式化读取信息
可以看到我们已经取出了所有的评论,那么可能大家还需要爬取这个评论的其他数据,例如发评论人的id,昵称和该条评论的点赞数量
import requests# 请求头headers = { # 用户身份信息 'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==', # 防盗链 'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb', # 浏览器基本信息 'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'}url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'# 1.发送请求response = requests.get(url=url,headers=headers)# 2.打印网页数据json_data = response.json()data_list = json_data['data']for data in data_list: text_raw = data['text_raw'] id = data['id'] # 发表评论人的id created_at = data['created_at'] # 评论发表在什么时候 like_counts = data['like_counts'] # 该评论的点赞数量 total_number = data['total_number'] # 该条评论被别人回复的数量 screen_name = data['user']['screen_name'] # 发表评论人的昵称 print(id,screen_name,text_raw,like_counts,total_number,created_at)
运行一下

可以看现在的输出数据已经很规整了
五、格式化输出
4.1 了解存储格式
4.2 单独取出内容
4.3 取出所有评论内容
4.4 格式化读取信息
五、referer 、referee、完整代码
我们把之前的代码加上
import requestsimport csvf = open('评论.csv',mode='a',encoding='utf-8-sig',newline='')csv_write = csv.writer(f)csv_write.writerow(['id','screen_name','text_raw','like_counts','total_number','created_at'])# 请求头headers = { # 用户身份信息 'cookie': 'SINAGLOBAL=3869338173200.8403.1711845564842; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; ULV=1711898034864:2:2:2:7503967975067.276.1711898034641:1711845565244; XSRF-TOKEN=aCKBvTY69V5X8kKbW1jSLjdj; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-fzvfDRMIeuWHMU2fJkIgYlwx20EQfKsyJ2pPS9worRswHbmrN7qQifEsHMJ5esrgA==', # 防盗链 'referer': 'https://weibo.com/7190522839/O1kt4jTyM', # 浏览器基本信息 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36' }def get_next( next = 'count=10'): url = f'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5003170104741808&is_show_bulletin=2&is_mix=0&{next}&uid=7190522839&fetch_level=0&locale=zh-CN' response = requests.get(url=url,headers=headers) json_data = response.json() data_list = json_data['data'] max_id = json_data['max_id'] for data in data_list: text_raw = data['text_raw'] id = data['id'] created_at = data['created_at'] like_counts = data['like_counts'] total_number = data['total_number'] screen_name = data['user']['screen_name'] print(id,screen_name,text_raw,like_counts,total_number,created_at) csv_write.writerow([id,screen_name,text_raw,like_counts,total_number,created_at]) max_str = 'max_id='+str(max_id) get_next(max_str)get_next()
但是我每次爬的话最多是爬五百条左右,就感觉进度不怎么动了
到这第一步就彻底成功喽!!!!!!
打开生成的表格之前的文章里面有!
九、格式化输出
那么接下来,我们想要将这些数据更加规整的输出
4.1 了解存储格式
1.那么我们首先要观察这些数据的存储方式
打开网页 -> 单击右键 -> 审查元素 -> 搜索一条评论 -> 点击预览(preview) -> 点击data旁边的小箭头 -> 点击 0 旁边的小箭头
那么在这林我们可以看到这里存有很多关于评论的数据,例如text_raw是评论的文本内容,source是发表评论人的ip来源地,id是发表评论人的id等等等
4.2 单独取出内容
那么我们先将第一个评论的text_raw用代码取出来试一下
import requests# 请求头headers = { # 用户身份信息 'cookie' : 'XSRF-TOKEN=KVMLznKAi1u5t7UavCDVyD0I; _s_tentry=weibo.com; Apache=3869338173200.8403.1711845564842; SINAGLOBAL=3869338173200.8403.1711845564842; ULV=1711845565244:1:1:1:3869338173200.8403.1711845564842:; PC_TOKEN=dcbe0bd978; SUB=_2A25LDMCxDeRhGeFJ71sS8CvLzTmIHXVoYFx5rDV8PUNbmtB-LVD9kW9Nf6JZvhCZ3PGanwgbD1yc6zGrHhnf6wrq; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W586R5s7_p1VykF21DkOu3L5JpX5o275NHD95QNS0B4e05fS0qfWs4DqcjAMJv09CH8SE-4BC-RSFH8SCHFxb-ReEH8SFHFBC-RBbH8Sb-4SEHWSCH81FHWxCHFeFH8Sb-4BEHWB7tt; ALF=1712450401; SSOLoginState=1711845601; WBPSESS=7dB0l9FjbY-Rzc9u1r7G0AeIukWsnj2u9VSmMssaP8z8nNdVQm3MrakDKiijTO3Y_iL6pEDJ8mgGw5Ql6jIh-aVUQoUZdu9LfLYmAiNsLqi43OBU2ZJdNYv4zIWorgKZiAz8JGn2kAugZwnStCVYKw==', # 防盗链 'referer' : 'https://weibo.com/2810373291/O7pPo1Ptb', # 浏览器基本信息 'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36'}url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5017675820436181&is_show_bulletin=2&is_mix=0&count=10&uid=2810373291'# 1.发送请求response = requests.get(url=url,headers=headers)#2.打印网页数据# .text:获取文本数据# .json():json字符串数据# .content:获取二进制数据# 这里如果我们想要单独取出数据,我们需要用json格式,它是一个格式化的数据# 用json格式获取数据后我们要找到第一条评论的内容# 我们把preview界面看作一个文件夹,那么我们首先打开的是 data ,然后是 0 ,然后是 text_raw# 这里注意 data、了解分页6.1 查看分页
这里为了方便演示多页的评论,我寻找了一个评论在两千条左右的帖子
找到页面 -> 单机右键 -> 检查元素(审查元素) -> 点击网络(network) -> 点击小的放大镜(搜索)-> 复制一条评论 -> 进行搜索 -> 点击标头(headers)
PS:之前的文章里有详细的一步一步的操作演示,如果有遇到问题的可以去看一下

我们能看到这个界面,这是你复制的那条评论所对应的分页的一个URL
在这里我们可以看到这个“buildComments”,这是对应的整篇帖子的评论的包,我们复制这一小部分

注意不要复制多了真正需要复制的其实只有buildComments,也可以自己打,但是为了避免手打出现错误我是比较推荐复制
将这一小部分粘贴至过滤(filter) -> 回车

此时我们会看到,立即出现一个分页的搜索结果
然后不关闭检查元素的界面 -> 我们将鼠标移到帖子的部分,向下划动贴子中的评论,此时我们会发现,随着我们不断向下划动,会逐渐出现更多的搜索结果

6.2 寻找分页的规律
首先我们观察一下第一个分页的URL
点击第一个搜索的结果(就是名称下面的那四行,我们先点击第一行)

在这里我们可以看到第一个页面的URL是这样的
然后我们查看第二个页面的URL

我们观察一下这两个URL的区别

我们发现绿色框住的是第一个分页的,它是“count=10”没有max_id,二粉色框住的URL是有max_id的,不知道大家之前有没有印象,在我们预览(preview)界面中,我们是见到过max_id的,所以我们观察一下第一个分页的max_id
打开第一个分页的预览(preview)界面

我们发现第一个分页的max_id和第二个分页URL中的max_id是完全一样的,我们可以多观察几组(例如第二个分页的max_id和第三个分页URL中的max_id)
然后我们就发现了不同分页之间的规律
七、