之前在搜索一些资料的时候,发现开源中国这个博客网站有一大亮点。那就是一张技能雷达图。大致如下:
但是遗憾的是CSDN官方并不支持这一实现,其实对于技能雷达图而言,言简意赅的能表现出一个技术者擅长的领域,以及不擅长的领域。
抱着玩一玩的态度,我也着手实现了一下针对CSDN博客用户的技能雷达图。下面先来看下最终实现的效果图。
接下来记录一下整体的实现流程。
思路
根据用户指定的博客ID,找到其文章分类情况。然后分别计算分类下文章的得分情况。
这个得分默认按照CSDN官方的规则计算。即:
- 博文每增加300个浏览量,积分加1
- 被人评论加一分
- 被人点赞加一分
- 被人点踩减一分
这里用的规则不是很适合,但是一般而言,一篇博客的浏览量,在一定程度上也代表了这篇文章的质量。
核心代码
计算部分
按照思路,这又是一个简单爬虫相关了。代码中已经做了比较详细的注释。
#!usr/bin/env python# coding: utf8import requestsimport mathimport refrom bs4 import BeautifulSoupclass Radar(object): """ 技术雷达实现 """ def __init__(self, username): """初始化用户名以及相应的域名前缀""" self.username = username self.domain = "http://blog.csdn.net" def download(self, url): """下载通用方法""" headers = { 'Host': 'blog.csdn.net', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36' } response = requests.get(url=url, headers=headers) return response.text if response.status_code == 200 else None def str_concat(self, *args): """ 字符串拼接方法,满足不定参数的实现""" tempstr = '' for item in args: tempstr += item return tempstr def get_catagories(self): """ 计算username对应的文章类别信息,获取类别名称, 对应的URL以及为其设置编号 """ url = self.str_concat(self.domain, '/', self.username) html = self.download(url=url) soup = BeautifulSoup(html, 'html.parser') temp_catagories = soup.find_all('div', {
'id': 'panel_Category'})[-1].find_all('a') catagory = [] for index, item in enumerate(temp_catagories): counts = soup.find_all('div', {
'id': 'panel_Category'})[-1].find