爬虫爬取微博评论--中---结构化接收数据(超详细教程,大学生不骗大学生)

目录

四、格式化输出

2.1 了解存储格式

2.2 单独取出内容

2.3 取出所有评论内容

2.4 格式化读取信息

五、导出成表格形式(完整代码直接看这)


上个文章讲到我们已经可以用文字的方式得到网页的信息(如果没看上一篇文章的可以先看一下)

​​​​​​https://blog.csdn.net/m0_68325382/article/details/137212689?spm=1001.2014.3001.550​​​​​​1

这个是多页爬取,也就是下

爬虫爬取微博评论--下--多页爬取(超详细教程,大学生不骗大学生)-CSDN博客

四、格式化输出

那么接下来,我们想要将这些数据更加规整的输出​​​​​​​

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、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)

运行一下

可以看现在的输出数据已经很规整了

五、导出成表格形式(完整代码直接看这)

我们将输出的数据导出成表格形式,更加方便我们观察与使用

import requests
import csv

f = 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' : '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.获取数据

# 3.提取数据
json_data = response.json()
data_list = json_data['data']

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)
    # 4.保存数据
     csv_write.writerow([id,screen_name,text_raw,like_counts,total_number,created_at])

运行一下

我们可以看到,有一个格式是 .csv 的文件生成了,我们可以在访问中打开它

打开表格

好了!!!!到这我们就成功咯

太棒啦能看到这里!!!!!!!(加油加油加油)


OK!!!!咱们明天说怎么爬取连续几页的评论

因为其实它这个评论是分页的,我们一次是爬不完嘟明天说

  • 16
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值