前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Java爬取微博数据(三) 微博主页用户数据

基于Java爬取微博数据(三) 微博主页用户数据

原创
作者头像
六月的雨在Tencent
发布2024-09-23 21:21:04
1740
发布2024-09-23 21:21:04
举报
文章被收录于专栏:创作是最好的自我投资

上一篇文章简单讲述了基于Java爬取微博数据(二),那么这篇将讲述如何基于 Java 爬取微博主页用户数据。

需求背景

对于微博数据,除了微博主页的列表数据外,当然还有微博主页用户数据,比如用户的粉丝、关注、点赞、评论等一些信息,这些信息对于其他微博用户来理解当前微博博主所从事行业及内容方向有很大的帮助或者参考作用。而对于这一部分内容数据的加载,微博也是有独立的接口来承载的。那么下面我们就来看一下这方面数据如何获取。

数据分析

在开始爬取微博主页用户数据之前,我们先对之前基于Java爬取微博数据(一)中的微博主页正文列表数据进行分析,看是否可以从中获取到微博主页用户数据。

首先还是按照基于Java爬取微博数据(一)中的方式获取微博主页正文列表数据内容

这样操作的目的主要是为了验证你代码中的登录信息cookies是否已经过期,防止误导后面爬取主页用户数据时爬取不到的原因分析。将获取到的数据取出一个微博内容的完整的 Json 对象,保存为 .json 文件

打开该微博正文内容,可以看到如下微博主页用户数据内容

然后我们再观察微博用户主页的一些数据,在实际的微博用户主页是还有用户的 粉丝数、关注数、主页描述、全部微博数等内容

一部分内容是无法从微博正文列表数据内容的 user 属性中获取,但是页面上可以展示,那么猜测这里应该是跳转到微博用户主页之后通过 ajax 异步加载了微博用户相关信息,那么继续查看 【网络】中相关请求,发现了一个获取 微博用户信息的 ajax 请求 /ajax/profile/info?uid=1686546714

取出请求 /ajax/profile/info?uid=1686546714 浏览器请求中的 响应 内容,可以看到我们需要的微博主页用户信息都有的

到这里,关于如何获取微博主页用户数据的数据分析就结束了,那么下面我们开始来写代码实现获取对应的微博主页用户数据。

爬取数据

这里我们重新创建一个 main 函数来单独的获取微博主页用户数据, DemoWeiBoInfo.java,整个类的代码比较简单,直接可以获取微博主页用户数据内容,最终执行的结果如图

DemoWeiBoInfo.java 的源码如下

代码语言:java
复制
package com.ruoyi.web.controller.demo.controller;

import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.utils.StringUtils;

import java.text.ParseException;

public class DemoWeiBoInfo
{
    /**
     * 获取微博主页账号信息
     * @param args
     * @throws ParseException
     */
    public static void main(String[] args) throws ParseException {
        // 获取微博账号主页信息
        String url = "https://weibo.com/ajax/profile/info?uid=1686546714";
        String cookie = "你的 Cookie";

        System.out.println("微博账号信息查询开始");

        HttpResponse response = HttpUtil.createGet(url)
                .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36")
                .header("Cookie",cookie)
                .execute();
        String body = response.body();
        //System.out.println(body);
        if (StringUtils.isNotEmpty(body)) {
            JSONObject jsonObject = JSON.parseObject(body);
            //获取数据 data
            JSONObject data = jsonObject.getJSONObject("data");
            // 获取 User 信息
            JSONObject user = data.getJSONObject("user");
            String id = user.getString("id");
            //用户id
            String idstr = user.getString("idstr");
            System.out.println("idstr:" + idstr);
            //用户名
            String screen_name = user.getString("screen_name");
            System.out.println("screen_name:" + screen_name);
            JSONObject status_total_counter = user.getJSONObject("status_total_counter");
            // 转、评、赞 数量
            String total_cnt_format = status_total_counter.getString("total_cnt_format");
            System.out.println("total_cnt_format:" + total_cnt_format);
            String total_cnt = status_total_counter.getString("total_cnt");
            System.out.println("total_cnt:" + total_cnt);
            //评论数量
            String comment_cnt = status_total_counter.getString("comment_cnt");
            System.out.println("comment_cnt:" + comment_cnt);
            // 转发数量
            String repost_cnt = status_total_counter.getString("repost_cnt");
            System.out.println("repost_cnt:" + repost_cnt);
            // 获赞数量
            String like_cnt = status_total_counter.getString("like_cnt");
            System.out.println("like_cnt:" + like_cnt);
            //用户头像
            String avatar_large = user.getString("avatar_large");
            System.out.println("avatar_large:" + avatar_large);
            //描述
            String description = user.getString("description");
            System.out.println("description:" + description);
            // 粉丝数量
            String followers_count = user.getString("followers_count");
            System.out.println("followers_count:" + followers_count);
            String followers_count_str = user.getString("followers_count_str");
            System.out.println("followers_count_str:" + followers_count_str);
            // 关注数量
            String friends_count = user.getString("friends_count");
            System.out.println("friends_count:" + friends_count);
            //微博数量
            String statuses_count = user.getString("statuses_count");
            System.out.println("statuses_count:" + statuses_count);
        }
        System.out.println("微博账号信息查询结束");
    }
}

那么到这里,基于Java 爬取微博用户主页数据的任务就实现了,后续还会继续讲解获取微博正文内容图片、视频等相关内容,敬请关注。

写在最后

本篇博文只是讲解了如何爬取微博主页用户数据相关内容,并没有继续讲解其他内容,这样主要是为了保证博文篇幅不是太长,方便大家阅读。

注意点

老规矩,最后说一下注意点。需要说明的是,本文主要是探索基于 Java 爬取微博用户主页数据相关内容实现,大家有需要的可以相互学习一下。但是注意不可用于非法用途,远离“破坏计算机信息系统罪”,慎重!慎重!慎重!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求背景
  • 数据分析
  • 爬取数据
  • 写在最后
  • 注意点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档