【感恩系列】:说点事儿 以及 我把所有的粉丝放到了中国地图上啦~
创始人
2024-02-01 21:02:02

文章目录

  • 💞许久不见,甚是想念
  • 💘初次相遇
  • 💘为什么写博客?
  • 💘写博客的收获
  • 💘此可已无言
  • 💘中国版图里的我们
    • 💖设计思路:
    • 💖具体实现
      • 💕爬取粉丝博客名和IP所属地
      • 💕数据清洗并保存
      • 💕绘制地图
  • 💘结束语

专栏
Python零基础入门篇🔥
Python网络蜘蛛🔥
Python数据分析
Django基础入门宝典🔥
小玩意儿🔥
Web前端学习
tkinter学习笔记
Excel自动化处理

💞许久不见,甚是想念

此刻突然不知道改写些什么了。距离上一个次写文章已有九天,这九天说长也长,每天都充斥这各种事情,感觉一天事情的量抵得了平常一周得量,但说短也短,这不,嗖的一下,又可以见到各位咯😁

我现在写这篇文章的时间是👉2020年11月19日19时15分
第一次注册CSDN的时间是👉2022年2月2日某时某分
这是我在CSDN的❗️291❗️

时间就是这样,还没等我们反应过来,它就已经悄无声息的走了,但是回头看,还是会看到它留下的痕迹,今天,就让我们随着这些痕迹,追寻过去的脚步吧💨

💘初次相遇

CSDN第一次相遇就是在大一完成(应付)C语言作业不会的时候,在网上查资料时相遇的。那时还不知道CSDN是什么,总是奇怪为什么每次查代码都能查到这个网站上来😂,后来慢慢的接触,才发现原来CSDN是一个技术知识服务的网站,有一群大佬在里面发博客,然后提供给我们抄……
在这里插入图片描述
那时的自己技术水平,不,说难听点就是没有什么技术水平,说好听点就是Hello world的水平。自己写个九九乘法表都费劲❗️根本就没有想着写博客这件事。后来,一次偶然的机会,我接触到Python这一编程语言,并对其产生极大的兴趣,于是便一发不可收拾的爱上了它。那时对它的热爱近乎疯狂的程度,每天一有空,就提着电脑背着书包往图书里钻,看视频、敲代码、写笔记,那时的笔记还是手写的,写了整整三本❗️❗️❗️(那时估计是脑子有点那啥,不好使,不知道可以在网上写笔记……还请见谅!)
浅浅给你们看一下笔记吧(温馨提示:一看书就会困的患者以及打死不想学习患者谨慎观看❗️)
在这里插入图片描述

每次一下课,其他同学要么趴着,要么……还是趴着(低头看手机),而我就在那赶着时间看笔记,手写代码,简直就是三好学生中的三好学生!
在这里插入图片描述

如果到了周末,就从早上六点半左右钻到图书馆,晚上十点半左右图书馆关门,被踢回宿舍,每天都是带着晨雾去,披星戴月回。实话实说,在此之前我是宿舍里最早睡觉的,几乎十点半左右就已经躺在床上不省人事了,但此后我变成了宿舍最后一个上床的,宿舍熄灯,黑暗里唯一最亮的光点就是我的书桌了。
其实有时候自己一个人呆久了,也感觉到孤独寂寥,但自我认为这是成功路上必经的阶段,也是每个人在青春奋斗中必经的阶段,不然,我们要青春做什么呢❓所以也就咬咬牙,将所有难熬的时光,嚼碎了咽到肚子里。
后来,自己的努力终于有了回报,因为我可以写一些NB的脚本,可以做我喜欢做的事情(法律允许范围内)。
👉直到21年的寒假,我做了一件事情,喜欢到现在。
这件事就是!@#¥%……&*
❗️写博客❗️

💘为什么写博客?

我为什么写博客呢?实话实说,我主要是为了方便自己看笔记
因为之前的笔记是手写的,每次都要把笔记放到书包里,然后背着个包,有空就从包里拿笔记出来看。这极其不方便自己,一旦我不背包,也就意味着我看不了笔记。所以我就想着在网上写笔记,但是网上写笔记的软件和网站有很多,为什么选择CSDN呢
这个问题很简单,因为我只知道它可以写博客。(请原谅我没见过世面)还有一个原因是想分享自己的笔记给大家,也可以说是分享欲作祟吧,总而言之,就在CSDN上写博客了。
一开始我想把之前手写的笔记整理好,以手写笔记为内容来写博客,于是一篇、两篇、三篇……,我的博客文章逐渐在CSDN上发表了。那时没有关注到什么粉丝量、阅读量、点赞量这些,只是单纯的想把之前的笔记整理好。后来,不知道是哪天,突然看到了我的文章被收藏了,且有几百个人阅读,还有一些点赞,一些关注,这突然给了我极大的自信,没想到会有人喜欢我写的笔记,于是就开始了我的疯狂写博客之路

💘写博客的收获

写博客有什么收获呢
看下面👇
在这里插入图片描述
这是能看得到的收获,我拥有3356个兄弟姐妹,这是让我感觉收获最大的。他们就是我写博客的动力源泉,正是因为他们的认可和鼓励,我才能有今天的小成就
看不到的收获有哪些呢?
其实,写博客的过程就是一个成长的过程,在写博客、敲代码的过程中会遇到许许多多的困难,有时候一个小Bug就可能花费了我一天的时间。但是,正是因为这些困难才让我有所成长,在解决问题的过程中我能学到很多东西,同时也能感受到我思维方式的改变,逐渐开始从多方面的角度去考虑和解决问题。这听起来可能比较虚,但它却实打实的存在。

💘此可已无言

这个时候已经不知道说什么了。有千言万语在堵在心口,但现在却只写了几个片段,总之非常感谢各位兄弟姐妹们的支持,我们在中国的各个地方,相识于CSDN上,相逢即是缘,来者皆是客
今天,我把你们化成星光,洒落在中国的大地上

💘中国版图里的我们

💖设计思路:

  1. 爬取兄弟姐妹的博客名和IP所属地,并保存到json文件中;
  2. 将获取的数据信息清洗,获得各个省、市、区的粉丝数量,并保存到json文件中;
  3. 根据情洗的数据,绘制中国地图,在地图上可显示各个省、市、区的粉丝数量。

💖具体实现

💕爬取粉丝博客名和IP所属地

本次代码没有采用分布式爬虫,只是使用了多线程,大意了!
多线程会久一些,粉丝超过5000的慎用,不然你会等到人麻(开玩笑啦😄)
注意几点:

  1. https://blog.csdn.net/community/home-api/v2/get-fans-list?page=1&pageSize=20&id={id}&noMore=false&blogUsername=,最后的等号后面写上自己的博客名
  2. ‘User-Agent’: ‘’,使用自己的User-Agent哈
    运行结果
    在这里插入图片描述
import requests
import json
import threading
from jsonpath import jsonpath
import re
import time# 博客名和博客链接
def fans_data():li_name = []    # 存储博客名blogUrl = []   # 存储博客链接id = 0i = 0while True:if i == 0:  # 如果是第一页的粉丝数据url = f'https://blog.csdn.net/community/home-api/v2/get-fans-list?page=1&pageSize=20&id={id}&noMore=false&blogUsername='else:url = f'https://blog.csdn.net/community/home-api/v2/get-fans-list?page={i+1}&pageSize=20&id={id}&noMore=false&blogUsername='try:res = requests.get(url, headers=headers)json_data = json.loads(res.text)# 获取粉丝博客名li_name += jsonpath(json_data, '$..username')# 获取粉丝博客链接blogUrl += jsonpath(json_data, '$..blogUrl')# 获取粉丝博客idid = jsonpath(json_data, '$..id')[-1]print(id)except:breaki += 1print(f'第{i}页粉丝数据获取成功!')return li_name, blogUrl# 获取粉丝的ip所属地
def fans_area(url):res = requests.get(url, headers=headers)try:area = re.findall('"region":"IP 属地:(.*?)","msg"', res.text)[0]except:area = ''li_area.append(area)print('IP所属地获取成功!')# 将粉丝的所属地和博客名保存到json文件中
def save_json():with open('CSDN粉丝信息.json', 'a', newline="", encoding='utf-8') as f:for i in range(len(li_name)):data = {'name':li_name[i], 'area':li_area[i]}# 将字典转换成json数据data_str = json.dumps(data, ensure_ascii=False)f.write(data_str + ',' + '\n')print('CSDN粉丝信息.json 文件保存成功!')if __name__ == '__main__':headers = {'User-Agent': ''}li_area = []    # 存储所有粉丝的所属地threads = []li_name, blogUrl = fans_data()      # 接收粉丝名和博客链接print('-----开始获取粉丝所属地-----')for i in blogUrl:threads.append(threading.Thread(target=fans_area(i)))for t in threads:t.start()save_json()print(len(li_name))

在这里插入图片描述

💕数据清洗并保存

因为绘制地图需要的地名不能有带有省、区、市,比如上海市,就要清洗成上海。所以需要对已经获取的IP所属地进行清洗,并使用pands模块进行分组统计,统计各个省、区、市中的粉丝数量。
注意:CSDN粉丝信息.json 是爬取粉丝博客名和IP所属地中保存下的。

import pandas as pd
import json
from jsonpath import jsonpath# 读取CSDN粉丝信息.json的内容
def read_file():li_area = []with open('CSDN粉丝信息.json', 'r', encoding='utf-8') as f:# 获取信息库中的json数据,并转换为Python字符串data = json.load(f)# 获取粉丝名字fans_name = jsonpath(data, '$..name')# 获取粉丝所属IP地址fans_area = jsonpath(data, '$..area')# 清洗数据for i in fans_area:if '省' in i or '市' in i:li_area.append(i[:-1])else:li_area.append(i)return li_area# 清洗数据,统计各个省份中的粉丝数
def wash_data(area):df = pd.DataFrame({'area': area, 'num': [1 for i in range(len(area))]})df = df.groupby('area').sum()   # 将粉丝所属地进行分组统计df.reset_index(inplace=True)fans_area = df['area'].values   # 统计中的所有IP所属地area_num = df['num'].values     # 各个所属地中粉丝的数量return list(list(i) for i in zip(fans_area, area_num))   # 使用拉链函数将列表包起来# 文件保存
def save_file():with open('ip所属地统计.json', 'a', newline="", encoding='utf-8') as f:for i in range(len(province_list)):data = {'area':province_list[i][0], 'num':str(province_list[i][1])}# 将字典转换成json数据data_str = json.dumps(data, ensure_ascii=False)f.write(data_str + ',' + '\n')if __name__ == '__main__':fans_area = read_file()province_list = wash_data(fans_area)save_file()

💕绘制地图

获取数据清洗后保存的ip所属地统计.json文件中的信息进行绘制

from pyecharts.charts import Map
from pyecharts import options as opts
import json
from jsonpath import jsonpath# 获取ip所属地统计.json中的信息
def fans_data():with open('ip所属地统计.json', 'r', encoding='utf-8') as f:data = json.load(f)# 获取ip所属地area = jsonpath(data, '$..area')# 获取数量num = jsonpath(data, '$..num')li_data = list(list(i) for i in zip(area, num))return li_data# 绘制地图
def draw_map(province_list):# 将省份和数量输出pieces = [{'max': 5, 'label': '5以下', 'color': '#0072E3'},{'min': 5, 'max': 10, 'label': '5-10', 'color': 'yellow'},{'min': 10, 'max': 20, 'label': '10-20', 'color': 'pink'},{'min': 350, 'max': 400, 'label': '350-400', 'color': 'red'},]# 软件工程专业c = (Map(init_opts=opts.InitOpts(width="1000px", height="600px"))  # 可切换主题.set_global_opts(title_opts=opts.TitleOpts(title="各省份CSDN粉丝分布"),visualmap_opts=opts.VisualMapOpts(min_=0,max_=500,range_text=['CSDN粉丝数量区间:', ''],  # 分区间is_piecewise=True,  # 定义图例为分段型,默认为连续的图例pos_top="middle",  # 分段位置pos_left="left",orient="vertical",# split_number=10,  # 分成10个区间pieces=pieces)).add("CSDN粉丝分布图", province_list, maptype="china").render("CSDN粉丝分布图.html"))if __name__ == '__main__':data = fans_data()draw_map(data)

在这里插入图片描述

💘结束语

今天的感想和所经历的事情没有展开说明太多,但是,未来有机会,我一定把我所经历的事情,以及学习的各个阶段的感悟分享给大家!

感谢遇见你们💙 💜 ❤️ 💚

希望你们生活有光,心中有梦😊

peace~

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...