俺把所有粉丝显示在地图上啦~【详细教程+完整源码】_查找给定ip地址的粉丝

博客名和博客链接

def fans_data():
li_name = [] # 存储博客名
blogUrl = [] # 存储博客链接
id = 0
i = 0
while 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, ‘KaTeX parse error: Expected 'EOF', got '#' at position 26: …') #̲ 获取粉丝博客链接 ……blogUrl’)
# 获取粉丝博客id
id = jsonpath(json_data, ‘$…id’)[-1]
print(id)
except:
break
i += 1
print(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))


**效果展示👇**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/384f669ad4ac4a23855edff6be1b5868.gif)


## 🌲数据清洗和保存




---


我们主要的**目的**就是获取所有粉丝的IP所属地并统计各个省份中的所有粉丝数量,然后在中国地图上展示出来。  
 于是我们需要对爬取到的信息进行**清洗**。  
 **具体思路**:使用强大的数据分析工具——**pandas**,通过它统计各个省份中的所有粉丝数量,然后将爬取的**IP所属地**信息进行清洗,将**省、区、市**这些词从IP所属地中删除,比如:将广西省清洗为广西。最后将所有统计和清洗的结果保存在**json**文件中。


### 🌴源代码


**源码如下👇**  
 **(如有错误,请在评论区中指出哦~😁)**



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, ‘KaTeX parse error: Expected 'EOF', got '#' at position 18: …name') #̲ 获取粉丝所属IP地址 ……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()


## 🌲绘制地图




---


绘制地图所需要用到的模块就是:**pyecharts**,其貌不扬的可是数据可视化编程中的**利器**。  
 下载方式:**pip install pyecharts**(这都基操啦)  
 **具体思路**:通过读取我们**清洗后**的数据信息来进行地图的绘制。需要改的相关设置请看下图👇  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/35a35c825891493685c5538220aaf73a.png)  
 **实现效果如下👇**  
 **(神奇不,鼠标浮动在地图省份上,会出现粉丝对应省份中粉丝的数量)**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/41034b8d576b4b30b2400308fd5a322e.gif)


### 🌴源代码


**源码如下👇**  
 **(如有错误,请在评论区中指出哦~😁)**



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, ‘KaTeX parse error: Expected 'EOF', got '#' at position 18: …area') #̲ 获取数量 n……num’)

    li_data = list(list(i) for i in zip(area, num))
    return li_data

绘制地图

def draw_map(province_list):
# 将省份和数量输出
pieces = [
{‘max’: 10, ‘label’: ‘10以下’, ‘color’: ‘#32CD99’},
{‘min’: 10, ‘max’: 50, ‘label’: ‘10-50’, ‘color’: ‘#3232CD’},
{‘min’: 50, ‘max’: 100, ‘label’: ‘50-100’, ‘color’: ‘#6B8E23’},
{‘min’: 100, ‘max’: 200, ‘label’: ‘100-150’, ‘color’: ‘#EAEAAE’},
{‘min’: 200, ‘max’: 300, ‘label’: ‘200-300’, ‘color’: ‘#9370DB’},
{‘min’: 300, ‘max’: 400, ‘label’: ‘300-400’, ‘color’: ‘#426F42’},
{‘min’: 400, ‘max’: 500, ‘label’: ‘400-500’, ‘color’: ‘#7F00FF’},
]

c = (
    Map(init_opts=opts.InitOpts(width="1000px", height="600px"))  # 可切换主题
        .set_global_opts(
        title_opts=opts.TitleOpts(title="IT工藤新一的各省份CSDN粉丝分布"),
        visualmap_opts=opts.VisualMapOpts(
            min_=0,
            max_=500,

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

9906)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值