成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Segmentfault的熱門標(biāo)簽,可視化展示?

gecko23 / 3399人閱讀

摘要:結(jié)論居首位,緊隨其后,位列第三。數(shù)據(jù)庫方面問題最多的還是。在各種技術(shù)名詞的標(biāo)簽下,還冒出一個程序員標(biāo)簽,排名第位。

結(jié)論

JavaScript居首位,HTML5緊隨其后,Python位列第三。

注:數(shù)據(jù)來源于569頁標(biāo)簽頁面的11,380 條記錄


涉及知識點

python爬蟲

requests庫

BeautifulSoup

elasticsearch儲存

- 批量bulk數(shù)據(jù)

kibana可視化

- 做圖展示

實現(xiàn)步驟

數(shù)據(jù)采集

批量入庫

繪制圖表

緣起

瀏覽segmentfault時,看到熱門標(biāo)簽,我就是思考了一下這個熱門到底有多熱。于是點擊到所有標(biāo)簽查看,發(fā)現(xiàn)只能肉眼一個個對比,F(xiàn)12看了下,中規(guī)中矩的html文本,requests+bs4可以處理,干脆我爬一下看看吧。。。額,手頭正好有一套elasticsearch+kibana的環(huán)境,我導(dǎo)進去看吧 emmmm....

數(shù)據(jù)采集

使用python爬取標(biāo)簽信息,包括:tag名稱,tag的解釋說明,tag的url,tag的關(guān)注人數(shù)
嗯,夠簡單,我喜歡。

def get_tag(page_num):
    result = requests.get("http://segmentfault.com/tags/all?page=%s"%page_num)
    return result.content

不得不說,segmentfault對爬蟲是真正的友好啊,headers什么的都不用填寫,直接簡單粗暴。熟悉python的同學(xué)對這種操作,恐怕就是跟 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é)點屬性等等,認(rèn)真閱讀文檔我相信大家都沒有問題。

列表和字典copy的問題,這里面要注意python的copy并不會為此開辟新的內(nèi)存,你可以想象為windows下的快捷方式,或者linux下的軟鏈接。所以此處我們使用deepcopy,使之開辟新的內(nèi)存存儲這個copy.

bulk數(shù)據(jù),這個我們接下來說明。

批量入庫

因為手頭有elasticsearch所以就導(dǎo)入了進來,關(guān)于elasticsearch的安裝和使用,社區(qū)里也有資源,有空我也會整理一篇文章。

python比較友好的地方就是各種包非常的全面,elasticsearch這個庫提供了一套API接口,用來增刪改查。這里說一下,我有一個夢想,就是希望從業(yè)環(huán)境更加的純粹,JD上的要求不要這么過分,當(dāng)面試官問我問題的時候,我可以微笑著告訴他,沒看過源碼,對底層架構(gòu)不熟悉,對原理的了解來自于各個博客的東拼西湊,熟練運用各種API接口,但是你不要讓我說出來幾個,因為我需要看文檔。然后面試官微笑著說,我很滿意,給你2K,如果接受明天可以來擰螺絲。

咳咳咳,言歸正傳。
elasticsearch的插入數(shù)據(jù)有兩種方式:

逐條插入

批量插入

代碼中實現(xiàn)的是批量插入。即爬取一個頁面,一個頁面中有20條tag信息,將這20條數(shù)據(jù)打包bulk.

數(shù)據(jù)長這個樣子

segmentfault站點下的569個標(biāo)簽頁面一共采集到11380條數(shù)據(jù)

單線程下爬取和寫入耗時269.183s

繪制圖表

通過kibana對elasticsearch的數(shù)據(jù)進行可視化,讓數(shù)據(jù)變得直觀,產(chǎn)生意義。
另外kibana 5以上新增加了詞云這個功能,就是我們文章開頭展示的那張圖表。

kibana作圖不涉及代碼編寫,但是各個指標(biāo)跟維度需要梳理好關(guān)系,以及什么樣的數(shù)據(jù)組合有意義。這個可以多帶帶拿出來作為一篇文章,我也會抽出時間整理的。

扯淡

看的出來,社區(qū)以javascript的問題眾多,以及Html5,Css3也分別位于第二位和第七位,看來最愛提問的是前端同學(xué)們。我想這個前端各種層出不窮的框架,以及js這個弱類型語言有很大的關(guān)系,并且通常這類問題比較具象,也較容易描述。

git這個版本控制工具的問題也不少,可是svn的身影我沒有看到,看出來趨勢了吧。

數(shù)據(jù)庫方面問題最多的還是mysql。

在各種技術(shù)名詞的標(biāo)簽下,還冒出一個程序員標(biāo)簽,排名第12位。emmmm,,,知道了你是個程序員,不用強調(diào)啦。

GitHub

雖然程序很簡單,但是當(dāng)我完成下面的TODO也會繼續(xù)更新下,我是個追求完美的程序員,盡管完美的事很難,當(dāng)我們也要為之奮斗?。?/p>

https://github.com/wkatios/se...

TODO

爬蟲對數(shù)據(jù)的抓取和寫入數(shù)據(jù)庫操作是一種比較耗費網(wǎng)絡(luò)的行為,并非CPU密集型,可以改用多線程,或者協(xié)程,提高速度。

多維度的數(shù)據(jù)抓取,好玩的事情通常需要更多的數(shù)據(jù)源和數(shù)據(jù)類型支持。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40993.html

相關(guān)文章

  • Segmentfault熱門標(biāo)簽,視化展示

    摘要:結(jié)論居首位,緊隨其后,位列第三。數(shù)據(jù)庫方面問題最多的還是。在各種技術(shù)名詞的標(biāo)簽下,還冒出一個程序員標(biāo)簽,排名第位。 結(jié)論 JavaScript居首位,HTML5緊隨其后,Python位列第三。 注:數(shù)據(jù)來源于569頁標(biāo)簽頁面的11,380 條記錄 showImg(https://segmentfault.com/img/bVXMRf?w=1178&h=548);showImg(http...

    rottengeek 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<