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

news/2024/7/19 8:44:12 标签: python, 爬虫, 数据可视化

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

  • 1. 写在前面
  • 2. 数据准备
    • 2.1. 博客主页面
    • 2.2. 粉丝主页面(多个)
  • 3. 代码展示
    • 3.1. 爬取博客主页面粉丝数据
    • 3.2. 爬取粉丝主页面粉丝数据
  • 4. 数据分析及可视化
  • 5. 总结

在这里插入图片描述

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. 爬取博客主页面粉丝数据

python">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. 爬取粉丝主页面粉丝数据

python">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数据提供给你。


http://www.niftyadmin.cn/n/1034104.html

相关文章

数据分析师做成了提数工程师,该如何破局?

0x00 前言最近收到了不少数据分析朋友的吐槽和抱怨:Title 是数据分析,结果天天做着提数的工作,没有技术含量分析结论都是运营和产品向老板汇报,没自己什么事别人家的数据分析都是各种算法和模型,为什么到了自己就是提数…

Python入门到精通【精品】第二章 - Python基础语法

Python入门到精通【精品】第二章 - Python基础语法1. 控制台输入与输出1.1. 输入1.1.1. 简单输入1.1.2. 转类型输入1.2. 输出2. 标识符、变量与赋值语句2.1. 标识符的命名规则2.2. 特殊的标识符——关键字2.3. 变量与赋值语句3. 数据类型、运算符与表达式3.1. 数据类型3.2. 运算…

数据中台已成下一风口,它会颠覆数据工程师的工作吗?

采访嘉宾|史凯整理|Natalie编辑|DebraAI 前线导读:数据中台被誉为大数据的下一站,由阿里兴起,核心思想是数据共享,并在 2018 年因为“腾讯数据中台论”再度成为了人们谈论的焦点。在 3 月 15 日…

达到什么算法水平可以面试百度AI岗?

2019年大家有没有发现一种社会现象,AI岗位的竞争变得越来越激烈?但同时用人企业却说AI人才非常缺乏?这个看似有点矛盾,但仔细想一想就能发现其中的主要原因还是很多人想涌入AI这个高薪行业,但绝大部分人的能力和学历、…

Python入门到精通【精品】第三章 - 控制语句

Python入门到精通【精品】第三章 - 控制语句 1. 分支结构控制语句1.1. 分支结构分类情况1.2. 单分支1.3. 双分支1.4. 多分支1.5. 嵌套1.6. 三元运算2. 循环结构控制语句2.1. while语句2.2. for语句2.3. break和continue语句2.3.1. break语句2.3.2. continue语句2.4. 嵌套2.5. 带…

数据分析的道与术

[编者语]这是一个来自百度内部培训关于数据分享的、阅读类的PPT,文字说明非常充分,适合刚入门数据分析的朋友进行学习。主要内容:1、什么是数据分析(道)1.1 数据分析是什么?1.2 什么…

Python入门到精通【精品】第四章 - 数据结构

Python入门到精通【精品】第四章 - 数据结构 1. 列表1.1. 创建列表1.2. 查询列表元素1.2.1. 一维列表1.2.2. 二维列表1.3. 修改1.4. 切片1.5. 删除1.6. 列表运算1.6.1. 列表相加1.6.2. 列表相乘1.7. 有关列表常用方法1.8. 遍历列表2. 元组2.1. 创建2.2. 访问2.3. 运算2.4. 遍历…

BI(商业智能)的未来?

这是傅一平的第309篇原创“与数据同行”开通了微信群和QQ群,现已汇聚了2500位小伙伴了,扫描以下二维码加入。正文开始商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能&#xf…