Spider | 使用requests模块来爬取微博评论数据

一、数据来源分析

1. 明确需求


明确需求明确采集的网站以及数据内容

  • 网站 : https://weibo.com/u/3261134763
  • 数据:评论相关数据

2. 抓包分析


通过浏览器的开发者工具分析对应的数据位置

  • 打开开发者工具
    • F12/右键点击检查选择network(网络)
  • 刷新网页
    • 让本网页的数据内容重新加载一遍
  • 通过关键字搜索找到对应的数据位置
    • 需要什么 搜索什么
      在这里插入图片描述
  • 数据包地址
    https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5094848836666976&is_show_bulletin=2&is_mix=0&count=20&type=feed&uid=3261134763&fetch_level=0&locale=zh-CN

二、代码实现步骤

1.发送请求

模拟浏览器对url发送请求

  • 模拟浏览器
    使用开发者工具中的参数内容

  • 请求参数
    GET请求查询参数(是直接在链接中就有)
    在这里插入图片描述

    • a.可以直接通过reqeusts模块get方法请求
      在这里插入图片描述

    • b.额外构建查询参数,请求时候携带查询参数即可
      在这里插入图片描述

2.获取数据

获取服务器返回的响应数据

  • 先获取可以看到的
    在这里插入图片描述
# 发送请求
headers ={
    # cookie  常用于检测是否有登录账号
    'cookie':'XSRF-TOKEN=wZ8bECpJlgJyRbWSyefxAaDp; SCF=AlZTrvx4aEpcEtUeDb6sIc9mpN0rLfEhGfC97di_e2wRzIMhcDuaF6bGoW2H7ieTyz_scbvU_tjjE-Imn60dbBg.; SUB=_2A25KJp01DeRhGeBG7VEU9S7MyDiIHXVpXZD9rDV8PUNbmtAGLVH7kW9NRhJk6IB8WfV1VqQziyFdnAS3bxt6KRuI; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5Av0xCkDDaiHBZ_nrFgJkx5JpX5KzhUgL.FoqRSoefSK57e0B2dJLoIEDzxEH8Sb-4BEHWBCH8SCHWxC-RBEH8SCHFxC-RSCH8SEHFBbHWxh54ehet; ALF=02_1732934246; WBPSESS=ajNkZa2PhdxrC0PPuU_zQFWFnZvPXbkCDhnBhExo1_W2n6PXRguOlwl2-22iNACZpnAxXZJu9DWzw6KBwWt5mpNMiJUxB0G4cYXXMBg3P6mB78-DWEEcUVbIUx0rCGZexw0aMiAQLntpouyF18cekg==',
    # 用户代理 表示浏览器/设备的基本身份信息
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36'
    }
# 请求网址
url ='https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=5094848836666976&is_show_bulletin=2&is_mix=0&count=10&uid=3261134763&fetch_level=0&locale=zh-CN'
# 发送请求
response = requests.get(url=url,headers=headers)

# 获取响应json数据
json_data = response.json()

# print(json_data)

# 保存文件
f = open('weibodata.csv','w',encoding='utf-8-sig',newline='')
csvwb = csv.DictWriter(f,fieldnames=['昵称','地区','性别','评论'])
csvwb.writeheader()

# 字典取值
data_list = json_data['data']

for index in data_list:
    # print(index)
    # 提取性别信息
    sex = index['user']['gender']
    if sex == 'f':
        gender = '女'
    elif sex =='m':
        gender = '男'
    else:
        gender = '保密'
    # 提取具体内容
    dit ={
        '昵称':index['user']['screen_name'],
        '地区':index['source'].replace('来自',''),
        '评论':index['text_raw'],
        '性别':gender,
    }
    print(dit)
    csvwb.writerow(dit)

3.解析数据

提取我们需要的数据内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

max_id = ''
for page in range(1,21):
    print(f'正在采集第{page}页的数据'%page)
    max_id = getcontents(Maxid=max_id)

在这里插入图片描述

4.保存数据

提取数据保存到表格文件中

f = open('weibodata.csv','w',encoding='utf-8-sig',newline='')
csvwb = csv.DictWriter(f,fieldnames=['昵称','地区','性别','评论'])
csvwb.writeheader()   # 写入列名 代码就是这么写的  


csvwb.writerow(dit)

5. 数据可视化-pyecharts

x = wb['地区'].value_counts().index.tolist()
y = wb['地区'].value_counts().tolist()


c = (
    Pie()
    .add(
        "",
        [
            list(z)
            for z in zip(
                # 传入数据内容
                x,
                y,
            )
        ],
        center=["40%", "50%"],
    )
    .set_global_opts(
        # 设置可视化标题
        title_opts=opts.TitleOpts(title="论用户地区分布情况"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    # 使用 render 方法将图表渲染到 "pie_scroll_legend.html" 文件中
    # .render("pie_scroll_legend.html")
)
c.render_notebook()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胜天半月子

打不打商的无所谓,能帮到你就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值