摘要:结论居首位,紧随其后,位列第三。数据库方面问题最多的还是。在各种技术名词的标签下,还冒出一个程序员标签,排名第位。
结论
JavaScript居首位,HTML5紧随其后,Python位列第三。
注:数据来源于569页标签页面的11,380 条记录
python爬虫
requests库
BeautifulSoup
elasticsearch储存
- 批量bulk数据
kibana可视化
- 做图展示实现步骤
数据采集
批量入库
绘制图表
缘起浏览segmentfault时,看到热门标签,我就是思考了一下这个热门到底有多热。于是点击到所有标签查看,发现只能肉眼一个个对比,F12看了下,中规中矩的html文本,requests+bs4可以处理,干脆我爬一下看看吧。。。额,手头正好有一套elasticsearch+kibana的环境,我导进去看吧 emmmm....
数据采集使用python爬取标签信息,包括:tag名称,tag的解释说明,tag的url,tag的关注人数
嗯,够简单,我喜欢。
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"差不多吧。。
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
上面一段代码还是有些需要注意的地方。
BeautifulSoup的使用,tag的获取,节点属性等等,认真阅读文档我相信大家都没有问题。
列表和字典copy的问题,这里面要注意python的copy并不会为此开辟新的内存,你可以想象为windows下的快捷方式,或者linux下的软链接。所以此处我们使用deepcopy,使之开辟新的内存存储这个copy.
bulk数据,这个我们接下来说明。
批量入库因为手头有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,,,知道了你是个程序员,不用强调啦。
GitHub虽然程序很简单,但是当我完成下面的TODO也会继续更新下,我是个追求完美的程序员,尽管完美的事很难,当我们也要为之奋斗啊!
https://github.com/wkatios/se...
TODO爬虫对数据的抓取和写入数据库操作是一种比较耗费网络的行为,并非CPU密集型,可以改用多线程,或者协程,提高速度。
多维度的数据抓取,好玩的事情通常需要更多的数据源和数据类型支持。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89465.html
摘要:结论居首位,紧随其后,位列第三。数据库方面问题最多的还是。在各种技术名词的标签下,还冒出一个程序员标签,排名第位。 结论 JavaScript居首位,HTML5紧随其后,Python位列第三。 注:数据来源于569页标签页面的11,380 条记录 showImg(https://segmentfault.com/img/bVXMRf?w=1178&h=548);showImg(http...
阅读 2083·2023-04-25 17:23
阅读 2899·2021-11-17 09:33
阅读 2482·2021-08-21 14:09
阅读 3529·2019-08-30 15:56
阅读 2576·2019-08-30 15:54
阅读 1601·2019-08-30 15:53
阅读 2091·2019-08-29 13:53
阅读 1111·2019-08-29 12:31