摘要:結(jié)論居首位,緊隨其后,位列第三。數(shù)據(jù)庫(kù)方面問(wèn)題最多的還是。在各種技術(shù)名詞的標(biāo)簽下,還冒出一個(gè)程序員標(biāo)簽,排名第位。
結(jié)論
JavaScript居首位,HTML5緊隨其后,Python位列第三。
注:數(shù)據(jù)來(lái)源于569頁(yè)標(biāo)簽頁(yè)面的11,380 條記錄
python爬蟲
requests庫(kù)
BeautifulSoup
elasticsearch儲(chǔ)存
- 批量bulk數(shù)據(jù)
kibana可視化
- 做圖展示實(shí)現(xiàn)步驟
數(shù)據(jù)采集
批量入庫(kù)
繪制圖表
緣起瀏覽segmentfault時(shí),看到熱門標(biāo)簽,我就是思考了一下這個(gè)熱門到底有多熱。于是點(diǎn)擊到所有標(biāo)簽查看,發(fā)現(xiàn)只能肉眼一個(gè)個(gè)對(duì)比,F(xiàn)12看了下,中規(guī)中矩的html文本,requests+bs4可以處理,干脆我爬一下看看吧。。。額,手頭正好有一套elasticsearch+kibana的環(huán)境,我導(dǎo)進(jìn)去看吧 emmmm....
數(shù)據(jù)采集使用python爬取標(biāo)簽信息,包括:tag名稱,tag的解釋說(shuō)明,tag的url,tag的關(guān)注人數(shù)
嗯,夠簡(jiǎn)單,我喜歡。
def get_tag(page_num): result = requests.get("http://segmentfault.com/tags/all?page=%s"%page_num) return result.content
不得不說(shuō),segmentfault對(duì)爬蟲是真正的友好啊,headers什么的都不用填寫,直接簡(jiǎn)單粗暴。熟悉python的同學(xué)對(duì)這種操作,恐怕就是跟 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的獲取,節(jié)點(diǎn)屬性等等,認(rèn)真閱讀文檔我相信大家都沒(méi)有問(wèn)題。
列表和字典copy的問(wèn)題,這里面要注意python的copy并不會(huì)為此開辟新的內(nèi)存,你可以想象為windows下的快捷方式,或者linux下的軟鏈接。所以此處我們使用deepcopy,使之開辟新的內(nèi)存存儲(chǔ)這個(gè)copy.
bulk數(shù)據(jù),這個(gè)我們接下來(lái)說(shuō)明。
批量入庫(kù)因?yàn)槭诸^有elasticsearch所以就導(dǎo)入了進(jìn)來(lái),關(guān)于elasticsearch的安裝和使用,社區(qū)里也有資源,有空我也會(huì)整理一篇文章。
python比較友好的地方就是各種包非常的全面,elasticsearch這個(gè)庫(kù)提供了一套API接口,用來(lái)增刪改查。這里說(shuō)一下,我有一個(gè)夢(mèng)想,就是希望從業(yè)環(huán)境更加的純粹,JD上的要求不要這么過(guò)分,當(dāng)面試官問(wèn)我問(wèn)題的時(shí)候,我可以微笑著告訴他,沒(méi)看過(guò)源碼,對(duì)底層架構(gòu)不熟悉,對(duì)原理的了解來(lái)自于各個(gè)博客的東拼西湊,熟練運(yùn)用各種API接口,但是你不要讓我說(shuō)出來(lái)幾個(gè),因?yàn)槲倚枰次臋n。然后面試官微笑著說(shuō),我很滿意,給你2K,如果接受明天可以來(lái)擰螺絲。
咳咳咳,言歸正傳。
elasticsearch的插入數(shù)據(jù)有兩種方式:
逐條插入
批量插入
代碼中實(shí)現(xiàn)的是批量插入。即爬取一個(gè)頁(yè)面,一個(gè)頁(yè)面中有20條tag信息,將這20條數(shù)據(jù)打包bulk.
數(shù)據(jù)長(zhǎng)這個(gè)樣子
segmentfault站點(diǎn)下的569個(gè)標(biāo)簽頁(yè)面一共采集到11380條數(shù)據(jù)
單線程下爬取和寫入耗時(shí)269.183s
通過(guò)kibana對(duì)elasticsearch的數(shù)據(jù)進(jìn)行可視化,讓數(shù)據(jù)變得直觀,產(chǎn)生意義。
另外kibana 5以上新增加了詞云這個(gè)功能,就是我們文章開頭展示的那張圖表。
kibana作圖不涉及代碼編寫,但是各個(gè)指標(biāo)跟維度需要梳理好關(guān)系,以及什么樣的數(shù)據(jù)組合有意義。這個(gè)可以多帶帶拿出來(lái)作為一篇文章,我也會(huì)抽出時(shí)間整理的。
扯淡看的出來(lái),社區(qū)以javascript的問(wèn)題眾多,以及Html5,Css3也分別位于第二位和第七位,看來(lái)最愛(ài)提問(wèn)的是前端同學(xué)們。我想這個(gè)前端各種層出不窮的框架,以及js這個(gè)弱類型語(yǔ)言有很大的關(guān)系,并且通常這類問(wèn)題比較具象,也較容易描述。
git這個(gè)版本控制工具的問(wèn)題也不少,可是svn的身影我沒(méi)有看到,看出來(lái)趨勢(shì)了吧。
數(shù)據(jù)庫(kù)方面問(wèn)題最多的還是mysql。
在各種技術(shù)名詞的標(biāo)簽下,還冒出一個(gè)程序員標(biāo)簽,排名第12位。emmmm,,,知道了你是個(gè)程序員,不用強(qiáng)調(diào)啦。
GitHub雖然程序很簡(jiǎn)單,但是當(dāng)我完成下面的TODO也會(huì)繼續(xù)更新下,我是個(gè)追求完美的程序員,盡管完美的事很難,當(dāng)我們也要為之奮斗??!
https://github.com/wkatios/se...
TODO爬蟲對(duì)數(shù)據(jù)的抓取和寫入數(shù)據(jù)庫(kù)操作是一種比較耗費(fèi)網(wǎng)絡(luò)的行為,并非CPU密集型,可以改用多線程,或者協(xié)程,提高速度。
多維度的數(shù)據(jù)抓取,好玩的事情通常需要更多的數(shù)據(jù)源和數(shù)據(jù)類型支持。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/89465.html
摘要:結(jié)論居首位,緊隨其后,位列第三。數(shù)據(jù)庫(kù)方面問(wèn)題最多的還是。在各種技術(shù)名詞的標(biāo)簽下,還冒出一個(gè)程序員標(biāo)簽,排名第位。 結(jié)論 JavaScript居首位,HTML5緊隨其后,Python位列第三。 注:數(shù)據(jù)來(lái)源于569頁(yè)標(biāo)簽頁(yè)面的11,380 條記錄 showImg(https://segmentfault.com/img/bVXMRf?w=1178&h=548);showImg(http...
閱讀 2101·2023-04-25 17:23
閱讀 2919·2021-11-17 09:33
閱讀 2513·2021-08-21 14:09
閱讀 3579·2019-08-30 15:56
閱讀 2605·2019-08-30 15:54
閱讀 1623·2019-08-30 15:53
閱讀 2126·2019-08-29 13:53
閱讀 1141·2019-08-29 12:31