摘要:結論居首位,緊隨其后,位列第三。數據庫方面問題最多的還是。在各種技術名詞的標簽下,還冒出一個程序員標簽,排名第位。
結論
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密集型,可以改用多線程,或者協程,提高速度。
多維度的數據抓取,好玩的事情通常需要更多的數據源和數據類型支持。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40993.html
摘要:結論居首位,緊隨其后,位列第三。數據庫方面問題最多的還是。在各種技術名詞的標簽下,還冒出一個程序員標簽,排名第位。 結論 JavaScript居首位,HTML5緊隨其后,Python位列第三。 注:數據來源于569頁標簽頁面的11,380 條記錄 showImg(https://segmentfault.com/img/bVXMRf?w=1178&h=548);showImg(http...
閱讀 3279·2021-10-11 11:08
閱讀 4423·2021-09-22 15:54
閱讀 912·2019-08-30 15:56
閱讀 864·2019-08-30 15:55
閱讀 3540·2019-08-30 15:52
閱讀 1352·2019-08-30 15:43
閱讀 1937·2019-08-30 11:14
閱讀 2503·2019-08-29 16:11