萬粉博主為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. 爬取博客主頁面粉絲資料
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中分析資料,
-
在我的粉絲群體中,有10個博客專家


-
在我的粉絲中
有3579個以m0_開頭作為昵稱的粉絲;
有2872個以weixin_開頭作為昵稱的粉絲;
有2070個以qq_開頭作為昵稱的粉絲;
有1679個以自定義昵稱的粉絲;
有8521個沒有修改昵稱的粉絲,
從這里我們也可以大概分析到:CSDN的新注冊用戶中,有約16.46%的用戶會更改自己的昵稱(忽略我粉絲中占極小部分的熟人);有42.00%的用戶通過手機注冊,33.70%的用戶通過微信注冊,有24.29%的用戶通過QQ注冊,




-
在我加入粉絲主頁資料進行分析的時候,我的粉絲數量也在增加,因此Excel粉絲的總數變為10164,其中男性粉絲有9576人,女性粉絲有588人,男生人數:女生人數 = 94.2%:5.8%


-
對于博客碼齡(也就是從注冊賬號的那天開始),既有超過10年碼齡的重量級博主,也有剛剛注冊的7-8天的新人博主,

5. 總結
我認為我爬取的一萬個粉絲的資料完全可以撐起一個完整的CSDN粉絲資料分析的模塊;進一步講,一萬個資料雖然只是全站用戶的鳳毛麟角,但這個資料量分析出來的很多結果也可以反映目前CSDN全站的資料,例如:用戶男女比例、用戶使用不同社交軟體注冊的比例,用戶修改昵稱的比例(一定程度反映活躍度)等等,
本文對資料的獲取僅僅是為了提高小伙伴們對爬蟲的興趣,體會到爬蟲在生活中的一些使用場景,對于爬取之后的完整資料,如果小伙伴們感興趣的話,歡迎在CSDN上私信我,我可以將完整的Excel資料提供給你,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287581.html
標籤:其他
下一篇:讓網頁更加美麗(css入門)
