爬虫爬取微博评论--下--多页爬取(超详细教程,大学生不骗大学生)
上次我们已经学会了如何爬取单页的微博评论,但是如果评论过多,只爬取单页的评论是不够的,所以我们需要爬取多页的评论没看过之前的文章可以看一下。
上次我们已经学会了如何爬取单页的微博评论,但是如果评论过多,只爬取单页的评论是不够的,所以我们需要爬取多页的评论
没看过之前的文章可以看一下
用python语言爬虫爬取微博评论(超详细版,大学生不骗大学生)_微博爬取-CSDN博客
爬虫爬取微博评论--中---结构化接收数据(超详细教程,大学生不骗大学生)-CSDN博客
目录
六、了解分页
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)
然后我们就发现了不同分页之间的规律
七、多页实现
在前面的代码中我们已经实现了单页的评论爬取,在这里我们是需要对URL进行修改就可
(下面演示的代码是不完全,只写出来新加的代码)
headers = {
# 之前的headers的值
}
# 定义一个get_next宏函数,在函数立里面定一个next变量,它的初值是 count=10
def get_next(next='count=10’):
# 然后我们把URL这里的 count=10 替换成 next 变量的值
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’] # 这里是单独获取这个分页的max_id
#这里是正常的格式化获取数据代码,为了方便观察新代码的结构我没写上
# 这里把单纯的 max_id 的数字加上 max_id=
max_str = 'max_id='+str(max_id)
# 调用get_next,且更行next的值
get_next(max_str)
# 调用方法
get_next()
八、完整代码
我们把之前的代码加上
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': '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()
到这第一步就彻底成功喽!!!!!!
打开生成的表格之前的文章里面有!
有任何问题或者写的有错误,都可以在评论区和我说,虽然我不一定会,因为我也是刚入门!!
啦啦啦啦啦啦大家清明有出去玩吗,我出去了一天,但是感觉耽误了很多时间
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)