JavaScript居首位,HTML5紧随其后,Python位列第三。javascript
注:数据来源于569页标签页面的11,380 条记录html
python爬虫前端
elasticsearch储存java
- 批量bulk数据
kibana可视化python
- 作图展现
浏览segmentfault时,看到热门标签,我就是思考了一下这个热门到底有多热。因而点击到全部标签查看,发现只能肉眼一个个对比,F12看了下,中规中矩的html文本,requests+bs4能够处理,干脆我爬一下看看吧。。。额,手头正好有一套elasticsearch+kibana的环境,我导进去看吧 emmmm....mysql
使用python爬取标签信息,包括:tag名称,tag的解释说明,tag的url,tag的关注人数
嗯,够简单,我喜欢。linux
def get_tag(page_num): result = requests.get('http://segmentfault.com/tags/all?page=%s'%page_num) return result.content
不得不说,segmentfault对爬虫是真正的友好啊,headers什么的都不用填写,直接简单粗暴。熟悉python的同窗对这种操做,恐怕就是跟 print "Hello World"差很少吧。。ios
def process_tag(content): soup = BeautifulSoup(content,'lxml') sections = soup.find_all('section') info = {} values = [] for section in sections: tag = section.div.h2.a.text tag_instruction = section.div.p.text follows = section.div.div.strong.text url = 'https://segmentfault.com'+section.div.h2.a['href'] info['url'] = urllib.unquote(url) info['tag'] = tag info['tag_instruction'] = tag_instruction info['follows'] = int(follows) deepcopy_info = copy.deepcopy(info) values.append({ "_index": 'segmentfault', "_type": 'tag', # "_op_type": "create", "_source": deepcopy_info }) return values
上面一段代码仍是有些须要注意的地方。git
由于手头有elasticsearch因此就导入了进来,关于elasticsearch的安装和使用,社区里也有资源,有空我也会整理一篇文章。程序员
python比较友好的地方就是各类包很是的全面,elasticsearch这个库提供了一套API接口,用来增删改查。这里说一下,我有一个梦想,就是但愿从业环境更加的纯粹,JD上的要求不要这么过度,当面试官问我问题的时候,我能够微笑着告诉他,没看过源码,对底层架构不熟悉,对原理的了解来自于各个博客的东拼西凑,熟练运用各类API接口,可是你不要让我说出来几个,由于我须要看文档。而后面试官微笑着说,我很满意,给你2K,若是接受明天能够来拧螺丝。
咳咳咳,言归正传。
elasticsearch的插入数据有两种方式:
代码中实现的是批量插入。即爬取一个页面,一个页面中有20条tag信息,将这20条数据打包bulk.
数据长这个样子
segmentfault站点下的569个标签页面一共采集到11380条数据
单线程下爬取和写入耗时269.183s
经过kibana对elasticsearch的数据进行可视化,让数据变得直观,产生意义。
另外kibana 5以上新增长了词云这个功能,就是咱们文章开头展现的那张图表。
kibana做图不涉及代码编写,可是各个指标跟维度须要梳理好关系,以及什么样的数据组合有意义。这个能够单独拿出来做为一篇文章,我也会抽出时间整理的。
看的出来,社区以javascript的问题众多,以及Html5,Css3也分别位于第二位和第七位,看来最爱提问的是前端同窗们。我想这个前端各类层出不穷的框架,以及js这个弱类型语言有很大的关系,而且一般这类问题比较具象,也较容易描述。
git这个版本控制工具的问题也很多,但是svn的身影我没有看到,看出来趋势了吧。
数据库方面问题最多的仍是mysql。
在各类技术名词的标签下,还冒出一个程序员标签,排名第12位。emmmm,,,知道了你是个程序员,不用强调啦。
虽然程序很简单,可是当我完成下面的TODO也会继续更新下,我是个追求完美的程序员,尽管完美的事很难,当咱们也要为之奋斗啊!
https://github.com/wkatios/se...