最近csdn偶尔就又有几个同学关注我,觉得很有动力!于是我想能在任何时候的桌面壁纸,都能看到csdn粉丝数以及显示他们的昵称,我觉得会很有意义!

下面展示效果,(「・ω・)「嘿

桌面壁纸实时展示粉丝数(CSDN)

分为如下几步

文章目录

  • 一,爬取csdn粉丝数和粉丝昵称
    • 爬粉丝数
    • 爬粉丝昵称(最新前五个)
  • 二,生成自定义壁纸
    • python生成自定义图片,并保存
    • 再将图片设置成壁纸
  • 三,完成实时更新(动态展示)
  • 四,相关代码地址

一,爬取csdn粉丝数和粉丝昵称

爬粉丝数

首先和粉丝数目有关的请求,qq_45722494是csdn的用户名

https://blog.csdn.net/qq_45722494/article/list/

发现了粉丝数目是直接镶嵌到html里面的,直接用get方式拿到

# 请求头,只需要User-Agent就行
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400'
}
# 获取粉丝数的函数
def get_fans_number():# 发起请求resp=requests.get("https://blog.csdn.net/qq_45722494/article/list/",headers=headers)# resp=requests.get("https://liangyuanshao.blog.csdn.net/article/list/",headers=headers)# 通过正则表达式匹配粉丝数,比较简洁fans_num=re.search('<span class="count" id="fan">(.*?)</span></dt>',resp.text).group(1)# 输出正确print("粉丝数",fans_num)return fans_num

输出正确

爬粉丝昵称(最新前五个)

粉丝信息通过这个接口来获取,pageSize我只弄了5个,按照自己的需求来

https://blog.csdn.net/community/home-api/v2/get-fans-list?page=1&pageSize=5&id=0&noMore=false&blogUsername=qq_45722494

需要从下面的json里面提取信息

{'code': 200, 'message': 'success', 'traceId': '24c12f9b-3075-4d68-adad-b39d8d87763b', 'data': {'list': [{'username': 'Bzmer', 'nickname': 'BBenjaminn', 'userAvatar': 'https://profile.csdnimg.cn/D/F/1/3_bzmer', 'blogUrl': 'https://blog.csdn.net/Bzmer', 'loginUserNameIsFollow': False, 'blogExpert': False, 'briefIntroduction': '个人网站:sigmod.coms.hk', 'id': 146750018}, {'username': 'm0_62902789', 'nickname': 'm0_62902789', 'userAvatar': 'https://profile.csdnimg.cn/2/F/F/3_m0_62902789', 'blogUrl': 'https://blog.csdn.net/m0_62902789', 'loginUserNameIsFollow': False, 'blogExpert': False, 'briefIntroduction': None, 'id': 146749679}, {'username': 'xujham', 'nickname': 'kkk@ynu', 'userAvatar': 'https://profile.csdnimg.cn/F/5/8/3_xujham', 'blogUrl': 'https://blog.csdn.net/xujham', 'loginUserNameIsFollow': False, 'blogExpert': False, 'briefIntroduction': None, 'id': 146711649}, {'username': 'huitaiter123', 'nickname': 'huitaiter123', 'userAvatar': 'https://profile.csdnimg.cn/4/1/3/3_huitaiter123', 'blogUrl': 'https://blog.csdn.net/huitaiter123', 'loginUserNameIsFollow': False, 'blogExpert': False, 'briefIntroduction': None, 'id': 146646263}, {'username': 'qq_56005252', 'nickname': '朝朝暮暮635', 'userAvatar': 'https://profile.csdnimg.cn/2/E/7/3_qq_56005252', 'blogUrl': 'https://blog.csdn.net/qq_56005252', 'loginUserNameIsFollow': False, 'blogExpert': False, 'briefIntroduction': None, 'id': 146625839}]}

下面是获取的函数,我采用了jsonpath来从json里面提取信息,非常的方便,或者直接for循环提取出nickname也是可以的。最后返回一个列表就行

import jsonpath
def get_fans_name():resp=requests.get("https://blog.csdn.net/community/home-api/v2/get-fans-list?page=1&pageSize=5&id=0&noMore=false&blogUsername=qq_45722494",headers=headers)checkurl = "$.data.list[*].nickname"# print(resp.json())nickname_list=jsonpath.jsonpath(resp.json(),checkurl)return nickname_list# print(nickname_list) ['BBenjaminn', 'm0_62902789', 'kkk@ynu', 'huitaiter123', '朝朝暮暮635']
get_fans_name()

二,生成自定义壁纸

python生成自定义图片,并保存

如何生成自定义图片,参考的是何三笔记源码,我是在其基础上改了一下,生成了图片,并把其保存到了本地(同目录下)

先用python生成图片,并保存到本地,不做过多解释了,自己该参数,就能改成想要的效果。

import re
from io import BytesIO
import requests
from PIL import Image,ImageDraw,ImageFontclass H3blogDrow:'''自定义图片样式'''def __init__(self) -> None:self.width = 1920self.heigth = 1080self.background_img = ''self.background_color = (42, 41, 55)self.layers = []self.convas = Nonedef parse_config(self, config: dict) -> None:c = configself.convas = Noneself.width = c.get('width', 1920)self.heigth = c.get('height', 1080)self.background_color = tuple([int(i) for i in c.get('background_color', '').split(',')])self.background_img = c.get('background_img', (42, 41, 55))layers = c.get('layers', None)if not layers:returnself.layers.extend(layers)def _create_canvas(self) -> None:self.convas = Image.new('RGB', (self.width, self.heigth), self.background_color)def draw(self) -> Image:'''画图'''# 创建背景设置画布self._create_canvas()if self.background_img and len(self.background_img) > 0:regex = re.compile(r'^(?:http|ftp)s?://' # http:// or https://r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...r'localhost|' #localhost...r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ipr'(?::\d+)?' # optional portr'(?:/?|[/?]\S+)$', re.IGNORECASE)m = re.match(regex, self.background_img)bg_img = Noneif m :resp = requests.get(self.background_img)_img_bytes = BytesIO()_img_bytes.write(resp.content)bg_img = Image.open(_img_bytes)else:#创建背景图片bg_img = Image.open(self.background_img)#将背景图片写入画布self.convas.paste(bg_img, (0,0))for layer in self.layers:if layer.get('layer_type') == 'text':self._draw_text(layer)if layer.get('layer_type') == 'image':self._draw_image()return self.convasdef _darw_image(self, layer: dict) -> None:passdef _draw_text(self, layer: dict) -> None:draw = ImageDraw.Draw(self.convas)_font = layer.get('font')font = ImageFont.truetype(_font.get('font'), _font.get('size', 36))align = layer.get('align')p = tuple()if align and align == 'center':f_w, f_h = font.getsize(layer.get('text')) #获取字体大小p = ((self.convas.width - f_w)/2, (self.convas.height - f_h)/2)elif align and align == 'top-left':p = (0,0)elif align and align == 'top-right':f_w, f_h = font.getsize(layer.get('text')) #获取字体大小p = (self.convas.width - f_w, 0)elif align and align == 'bottom-left':f_w, f_h = font.getsize(layer.get('text')) #获取字体大小p = (0, self.convas.height - 4*f_h)elif align and align == 'bottom-right':f_w, f_h = font.getsize(layer.get('text')) #获取字体大小p = (self.convas.width - f_w, self.convas.height - f_h)else:p = tuple([int(i) for i in layer.get('position','0,0').split(',')])color = tuple([int(i) for i in layer.get('color','0,0,0').split(',')])draw.text(p, layer.get('text',''), fill = color, font = font)config = {'width': 1920,'height': 1080,'background_img': '','background_color':'42,41,55','layers': [{'layer_type': 'text','color': '255,0,0','font': {'font': './上首疾风书法体.ttf','size': 140,},'position': '0,0','align': 'center','text': 'csdn粉丝数:1220'},{'layer_type': 'text','color': '0,255,0','font': {'font':'./上首疾风书法体.ttf','size': 40,},'position': '','align': 'bottom-left','text': 'kkk@ynu关注了你\nhuitaiter123关注了你\n朝朝暮暮635关注了你\nzfy2763428175关注了你\nzxy20030123关注了你'},{'layer_type': 'text','color': '155,0,255','font': {'font': './上首疾风书法体.ttf','size': 70,},'position': '','align': 'bottom-right','text': '小梁说代码'},],
}
d = H3blogDrow()
d.parse_config(config)
img = d.draw()
# 展示出来
img.show()
# 保存到本地
# img.save('./wallpaper.png')

再将图片设置成壁纸

五行代码就能把图片变成壁纸,注意imagepath必须是绝对路径!绝对路径!绝对路径需要改成自己的路径windows系统才能找到

import ctypes
import os
# imagepath是要将被设置成壁纸图片的绝对路径,自己改
#获取当前目录绝对路径
path=os.getcwd()
# print(path)   D:\Software\PyCharm\Projects\FansWallPaper
imagepath=path+r"\wallpaper.png"
# imagepath ='D:\Software\PyCharm\Projects\FansWallPaper\wallpaper.png'
ctypes.windll.user32.SystemParametersInfoW(20, 0, imagepath, 0)

三,完成实时更新(动态展示)

最后把它们连在一起来就行啦!我设置的时间是3秒进行来刷新,你们也可以设置时间短一点

import H3blogDrow
d = H3blogDrow.H3blogDrow()
config= H3blogDrow.configlast_fans_num=get_fans_number()while True:fans_num=get_fans_number()# 如何粉丝数没有变的话,就不进行下面的命令了,直接休息跳过if last_fans_num==fans_num:time.sleep(10)continuelast_fans_num=fans_numnickname_list=get_fans_name()config['layers'][0]['text']=f'csdn粉丝数:{fans_num}'config['layers'][1]['text']="关注了你\n".join(nickname_list)# print(config)d.parse_config(config=config)img = d.draw()img.save('./wallpaper.png')change_wallpaper()#刷新时间3秒time.sleep(3)

最后我把它打包成了一个exe文件,关于python如何打包可以参考我这个文档,还是比较新的:https://liangyuanshao.blog.csdn.net/article/details/123022418

最后我把这个exe文件设置为开机自动运行,每天就能实时自动展示csdn粉丝数了

四,相关代码地址

完整代码可以参考

github仓库地址:https://github.com/liangyuanshao/FansWallPaper

或者通过我的微信公众号获取:小梁代码

参考链接

https://blog.csdn.net/Ikaros_521/article/details/121906468

http://www.h3blog.com/article/python-autobuild-image/

桌面壁纸实时展示粉丝数(CSDN)相关推荐

  1. github电脑壁纸_GitHub - songhanghang/redcord: 桌面壁纸-实时定位你的Ta

    Redcord 缘起 是否遇到过,有急事找Ta, 但是电话打不通,微信没人接,即使科技再发达,找Ta时你也抓瞎! 如果你和家人都是iphone用户,可以开启家人位置共享,这样可以随时随地查看Ta在什么 ...

  2. 服务器更换桌面壁纸,实时更换桌面背景工具

    [原创]重大发现实时更换桌面背景 不经意中发现此可以对客户机桌面背景图进行更换. 之前我也试过很多的桌面更换软件,但只能在开机脚本运行一次,刷新不会更换,网上也有桌面聊天什么的.用以下方法只要做一点修 ...

  3. 为揭秘CSDN谁有100万粉丝?我连夜研发了粉丝数排行榜插件,通过 dalao 一键即可唤醒

    橡皮擦,做好技术接待工作 本博客起源于 5A 技术俱乐部的一次闲聊,大家在讨论 CSDN 粉丝最多的作者是谁? 恰巧这题有解,接下来,橡皮擦将通过实现 CSDN 插件扩展的方式,为你揭秘 CSDN 哪 ...

  4. 呼叫 :邓伦粉丝!手机桌面壁纸来喽

    粉丝们必备,把偶像的每一个角色都写手机在手机相册了,是不是的同步自己的那份情愫, 当心情低落时 放一张笑颜如花的图片 由阴转晴: 偶像是一种力量 当疲惫不堪时 再换换手机壁纸 如阴暗巧遇曙光: 无论你 ...

  5. 软件工程师,用100天时间让CSDN粉丝数从0狂飙到10000

    2022年10月7日,正式开通了CSDN账号.但因为工作忙的原因,一直没有时间写博客文章,也没有投入精力在CSDN上.理所当然的,我的粉丝数量很稳定,一直保持着0的记录. 2023年春节假期过后,有点 ...

  6. 用MapReduce统计微博的粉丝数,加上博主的昵称

    需求: *统计粉丝数,对应的作者昵称,进行排名 //*字段含义:id,发布时间,点赞数,评论数,转发数,作者昵称,关注,粉丝数,性别,博客内容             //数据格式:440412206 ...

  7. 基于Python打印文字到桌面壁纸上的提醒学习小程序

    想法起点 最近本人在B站上边学习JAVA,但苦于JAVA有上百多P的选集 每次看完课关掉浏览器都必须将当前页面添加到收藏夹,然后再删掉之前保存的链接 在密密麻麻的小框框里一个一个点是真的不舒服,还容易 ...

  8. 安卓桌面壁纸_教你一分钟定制你的个性锁屏桌面壁纸(安卓+ios)

    --------  点击上方蓝字,轻松关注我们  -------- 教你一分钟定制你的个性锁屏桌面壁纸 ★特色: ☆定制锁屏:强大功能,锁屏和解锁样式都可用照片和文字重新定义 ☆保护隐私:除了滑动锁, ...

  9. 基于ESP32(Micropython)的天气显示+B站粉丝数显示-v4

    一.功能展示 1.天气显示 第一行:更新时间 第二行:实际温度,体感温度 第三行:风速,风向,降水量 第四行:实时天气状况描述,湿度 2.B站粉丝显示 第一行:B站up主"帅农鸟哥" ...

最新文章

  1. FPGA与ASIC:它们之间的区别以及使用哪一种?
  2. Angular开山篇
  3. 自从用完 Gradle 后,有点嫌弃 Maven 了!速度贼快!
  4. CAS Server(一):搭建服务端
  5. 关于python语言数值操作符、以下选项错误的是 答案是_关于Python注释,以下选项中描述错误的是...
  6. python文件操作总结
  7. x86 32位oracle,X86 32位和64位的区别
  8. 梯度下降优化算法总结
  9. 大功率MOS管选型手册及可申请样品-KIA MOS管
  10. CS领域论文数据分析
  11. 自我总结3dmaxs建筑场景展uv步骤
  12. 记账小程序 微信小程序 源码 uniapp vue3
  13. 老外网络语言缩写总结
  14. 福利:go语言开发的sock5代理服务器
  15. 甘特图控件VARCHART XGantt,解读活动组布局的“单独行中的节点”选项!
  16. 软件开发人员 梦想最大的阻碍:毒、赌、黄
  17. csm和uefi_[整理]BIOS设置UEFI和安全引导
  18. 计算机考研调查报告,关于大学生考研的调查报告
  19. ppt编写一个抽奖系统_PPT抽奖程序
  20. IPad 如何使用蓝牙鼠标

热门文章

  1. [TFF学习]官方教程jupyter运行记录_联邦学习之图像分类任务_1
  2. ISL-Chap12.1笔记
  3. 数据库连接池到底应该设多大?这次直接从100ms优化到3ms!
  4. 全球与中国亚麻籽行业消费量调研及未来产销需求分析报告2022-2028年
  5. set setenv
  6. 交易所安全测试--信息泄露
  7. 数据结构--8.排序
  8. idea更改本地依赖位置Libraries仍然爆红解决方案
  9. HD-SDI转HDMI转换器怎么连接?hd-sdi转hdmi转换器常见故障有哪些?
  10. lgb使用方法与调参