万粉博主为CSDN增加粉丝数据分析模块【硬核】

在这里插入图片描述

1. 写在前面

截止2021年6月13日,我的CSDN个人账号终于突破1w粉丝啦!
在这里插入图片描述

做为一个创作不到 一个月的博主来说,我知道我的作品还不多,但能够收获这么多粉丝真的很意外,小J会继续加油哒!既然今天突破1万粉丝,那么我就在想能不能做一点值得纪念的事情。于是我就有了一个想法——将1w个粉丝的基本信息存到一张表格里面。

2. 数据准备

2.1. 博客主页面

目标链接为本人博客主页的粉丝页面
https://blog.csdn.net/PaperJack?type=sub&subType=fans

通过对网页的分析,我们发现粉丝的信息就藏在这个下图这个url中,并且以分页的json格式数据返回给前端,每一页的数量为20,根据粉丝的总数动态分布页数。

在这里插入图片描述
图中标出的数据即为我最新的一个粉丝的具体信息。

在这里插入图片描述
关于如何爬取信息以及如何将信息存储到Excel中,更加详细的过程可以查看我的一下文章

使用Python爬取一个网页并解析
(截止写该篇文章时已获得1w+浏览)

【干货】建议收藏!!全网最完整的Python操作Excel数据封装函数(截止写该篇文章时已获得955收藏)

2.2. 粉丝主页面(多个)

目标链接为本人博客主页粉丝的每一个主页
当我们爬取了主页面的粉丝数据的时候,我们缺少了粉丝数据中最为关键的一部分信息——粉丝的性别和码龄。这一部分信息对我个人而言是有用的,对CSDN的用户群体分析也是有一定的价值的(毕竟1万虽然不多,但也足够反应真实情况)。
在这里插入图片描述
同样将数据爬取之后放到同一个Excel中

3. 代码展示

3.1. 爬取博客主页面粉丝数据

import openpyxl
import requests
from lxml import etree

def i_love_CSDN(CSDN_id, fans_nums):
    # 目标Url
    url = "https://blog.csdn.net/community/home-api/v1/get-fans-list"
    # 模拟浏览器
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
    }
    # 根据粉丝数目设置总页数
    if fans_nums % 20 == 0:
        page_nums = fans_nums // 20
    else:
        page_nums = (fans_nums // 20) + 1
    # 总数据
    bli = []
    # 单条数据
    li = []
    # 设置第一行的中文标题
    li.append("是否为博客专家")
    li.append("博客链接")
    li.append("博客自我简介")
    li.append("我是否关注该用户")
    li.append("昵称")
    li.append("头像")
    li.append("用户名")
    bli.append(li)
    # 循环访问每一页
    for i in range(1,page_nums):
        params = {
            "page": i,
            "size": 20,
            "noMore": "false",
            "blogUsername": CSDN_id
        }
        resp = requests.get(url, headers=headers, params=params)
        js = resp.json()
        infos = js['data']['list']
        # 解析到访问后的数据
        for info in infos:
            li = []
            blogExpert = info['blogExpert']
            blogUrl = info['blogUrl']
            briefIntroduction = info['briefIntroduction']
            loginUserNameIsFollow = info['loginUserNameIsFollow']
            nickname = info['nickname']
            userAvatar = info['userAvatar']
            username = info['username']
            li.append(blogExpert)
            li.append(blogUrl)
            li.append(briefIntroduction)
            li.append(loginUserNameIsFollow)
            li.append(nickname)
            li.append(userAvatar)
            li.append(username)
            bli.append(li)
            # 打印测试数据
            print(li)
    return bli

# 写入Excel
def write_xlsx_excel(url, sheet_name, two_dimensional_data):
    # 创建工作簿对象
    workbook = openpyxl.Workbook()
    # 创建工作表对象
    sheet = workbook.active
    # 设置该工作表的名字
    sheet.title = sheet_name
    # 遍历表格的每一行
    for i in range(0, len(two_dimensional_data)):
        # 遍历表格的每一列
        for j in range(0, len(two_dimensional_data[i])):
            # 写入数据(注意openpyxl的行和列是从1开始的,和我们平时的认知是一样的)
            sheet.cell(row=i + 1, column=j + 1, value=str(two_dimensional_data[i][j]))
    # 保存到指定位置
    workbook.save(url)
    print("写入成功")


if __name__ == '__main__':
    # 参数为CSDN的ID和当前粉丝数量
    bli = i_love_CSDN('PaperJack',10212)
    # 参数为文件路径、表格名称和将要写入的数据
    write_xlsx_excel("D:\myfans.xlsx",'sheet1',bli)
    # 提示操作成功
    print("over...")

3.2. 爬取粉丝主页面粉丝数据

import openpyxl
import requests
from lxml import etree

def i_love_CSDN(CSDN_id, fans_nums):
    # 目标Url
    url = "https://blog.csdn.net/community/home-api/v1/get-fans-list"
    # 模拟浏览器
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
    }
    # 根据粉丝数目设置总页数
    if fans_nums % 20 == 0:
        page_nums = fans_nums // 20
    else:
        page_nums = (fans_nums // 20) + 1
    # 总数据
    bli = []
    # 单条数据
    li = []
    # 设置第一行的中文标题
    li.append("是否为博客专家")
    li.append("博客链接")
    li.append("码龄")
    li.append("性别")
    li.append("博客自我简介")
    li.append("我是否关注该用户")
    li.append("昵称")
    li.append("头像")
    li.append("用户名")
    bli.append(li)
    # 循环访问每一页
    for i in range(1,page_nums):
        params = {
            "page": i,
            "size": 20,
            "noMore": "false",
            "blogUsername": CSDN_id
        }
        resp = requests.get(url, headers=headers, params=params)
        js = resp.json()
        infos = js['data']['list']
        # 解析到访问后的数据
        for info in infos:
            li = []
            blogExpert = info['blogExpert']
            blogUrl = info['blogUrl']

            resps = requests.get(blogUrl,headers = headers)
            tree1 = etree.HTML(resps.text)
            codeAge = tree1.xpath("/html/body/div[1]/div/div[1]/div/div/div/div/div/div[1]/div[2]/div[2]/div/div[2]/span/text()")[0]
            gender = tree1.xpath("/html/body/div[1]/div/div[1]/div/div/div/div/div/div[1]/div[2]/div[1]/div[1]/i/@class")[0]
            if gender == 'user-gender-male':
                gender = '男'
            elif gender == 'user-gender-female':
                gender = '女'
            else:
                gender = "其他"
            briefIntroduction = info['briefIntroduction']
            loginUserNameIsFollow = info['loginUserNameIsFollow']
            nickname = info['nickname']
            userAvatar = info['userAvatar']
            username = info['username']
            li.append(blogExpert)
            li.append(blogUrl)
            li.append(codeAge)
            li.append(gender)
            li.append(briefIntroduction)
            li.append(loginUserNameIsFollow)
            li.append(nickname)
            li.append(userAvatar)
            li.append(username)
            bli.append(li)
            # 打印测试数据
            print(li)
    return bli

# 写入Excel
def write_xlsx_excel(url, sheet_name, two_dimensional_data):
    # 创建工作簿对象
    workbook = openpyxl.Workbook()
    # 创建工作表对象
    sheet = workbook.active
    # 设置该工作表的名字
    sheet.title = sheet_name
    # 遍历表格的每一行
    for i in range(0, len(two_dimensional_data)):
        # 遍历表格的每一列
        for j in range(0, len(two_dimensional_data[i])):
            # 写入数据(注意openpyxl的行和列是从1开始的,和我们平时的认知是一样的)
            sheet.cell(row=i + 1, column=j + 1, value=str(two_dimensional_data[i][j]))
    # 保存到指定位置
    workbook.save(url)
    print("写入成功")


if __name__ == '__main__':
    # 参数为CSDN的ID和当前粉丝数量
    bli = i_love_CSDN('PaperJack',10246)
    # 参数为文件路径、表格名称和将要写入的数据
    write_xlsx_excel("D:\myfans.xlsx",'sheet1',bli)
    # 提示操作成功
    print("over...")

4. 数据分析及可视化

主页面数据正在爬取的过程
在这里插入图片描述
添加了粉丝性别和码龄的爬取过程
在这里插入图片描述

只有主页面数据的Excel文件截图
在这里插入图片描述
加入粉丝主页码龄和性别数据后的Excel文件截图
在这里插入图片描述

本来我是打算用Python继续分析数据,但现在数据已经完整的存到了Excel中,考虑到操作的方便性,我接下来将会直接在Excel中分析数据。

  1. 在我的粉丝群体中,有10个博客专家
    在这里插入图片描述
    在这里插入图片描述

  2. 在我的粉丝中
    有3579个以m0_开头作为昵称的粉丝;
    有2872个以weixin_开头作为昵称的粉丝;
    有2070个以qq_开头作为昵称的粉丝;
    有1679个以自定义昵称的粉丝;
    有8521个没有修改昵称的粉丝。
    从这里我们也可以大概分析到:CSDN的新注册用户中,有约16.46%的用户会更改自己的昵称(忽略我粉丝中占极小部分的熟人);有42.00%的用户通过手机注册,33.70%的用户通过微信注册,有24.29%的用户通过QQ注册。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 在我加入粉丝主页数据进行分析的时候,我的粉丝数量也在增加,因此Excel粉丝的总数变为10164,其中男性粉丝有9576人,女性粉丝有588人。男生人数:女生人数 = 94.2%:5.8%
    在这里插入图片描述
    在这里插入图片描述

  4. 对于博客码龄(也就是从注册账号的那天开始),既有超过10年码龄的重量级博主,也有刚刚注册的7-8天的新人博主。
    在这里插入图片描述

5. 总结

我认为我爬取的一万个粉丝的数据完全可以撑起一个完整的CSDN粉丝数据分析的模块;进一步讲,一万个数据虽然只是全站用户的凤毛麟角,但这个数据量分析出来的很多结果也可以反映目前CSDN全站的数据,例如:用户男女比例、用户使用不同社交软件注册的比例,用户修改昵称的比例(一定程度反映活跃度)等等。

本文对数据的获取仅仅是为了提高小伙伴们对爬虫的兴趣,体会到爬虫在生活中的一些使用场景。对于爬取之后的完整数据,如果小伙伴们感兴趣的话,欢迎在CSDN上私信我,我可以将完整的Excel数据提供给你。

  • 81
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 135
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 135
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

执章学长

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值