開篇不打算寫太多技術(shù)細(xì)節(jié),只想來闡述一下計劃寫該系列博客的初衷。
首先按照慣例,先做個自我介紹。博主本人一直是從事C++相關(guān)方面的研發(fā),自認(rèn)為技術(shù)很是一般(不只是謙虛),現(xiàn)在也同時兼顧在做一些大數(shù)據(jù)與云計算方面的工作,對機(jī)器學(xué)習(xí)和自然語言處理也有部分涉獵,總之是涉獵很廣,但精通的卻很少。
公司有一項業(yè)務(wù)是做政策收集及發(fā)布的,說白了就是人工查看哪些政府網(wǎng)站有新的政策發(fā)布了,就復(fù)制粘貼,修改下格式發(fā)布到我們的網(wǎng)站上,這算是一個政策信息的聚合平臺吧。但是這種方式確實是費時費力,搞得這方面的人手一直緊張。后來leader一看一直招人也不是個辦法,就想著能不能做個爬蟲來自動抓取和發(fā)布信息,后來聽說我會些python,就把這項光榮而艱巨的任務(wù)交個了我。其實博主也只是在實習(xí)期間學(xué)習(xí)過一段時間的python,這么長時間不用早就忘了,更別說之前對爬蟲只是聽說,沒有任何的概念。沒辦法困難來了,硬著頭皮也要上啊。
經(jīng)過一個多月的加班奮戰(zhàn),終于在2015年年底完成了爬蟲的第一個版本。該版本是基于大名鼎鼎的Scrapy框架開發(fā)的,由于python自身的隊列不支持分布式,采用了Redis來作為url排重和隊列,以實現(xiàn)爬蟲的分布式抓取;存儲采用的是mongodb數(shù)據(jù)庫;動態(tài)網(wǎng)頁采用的是Selenium模擬瀏覽器加載。其中實現(xiàn)了政策信息標(biāo)題、時間、內(nèi)容的自動抽取,地域、行業(yè)的自動劃分等功能。
轉(zhuǎn)眼到了2016年的年底,一年時間就這樣過去了,這一年間該爬蟲運行還算穩(wěn)定,公司leader對這套系統(tǒng)也算滿意,并表示希望能通過爬蟲覆蓋全國的網(wǎng)站,每當(dāng)這時我都感覺羞愧難當(dāng),因為我深知這套系統(tǒng)還遠(yuǎn)遠(yuǎn)達(dá)不到令我滿意的效果,隨著對爬蟲技術(shù)的不斷了解,這種感覺越來越明顯,但是苦于忙于其他事情,一直抽不出時間來改,很是著急。
正好年底做計劃時leader把爬蟲的改版任務(wù)列入了明年的計劃中,博主也想借這個機(jī)會再系統(tǒng)的了解下爬蟲,并寫個系列的博客,一方面是通過總結(jié)加深理解,另一方面也希望我的文章能對一些人有所幫助。粗略規(guī)劃了下下一步要改進(jìn)的方面:
增加可視化調(diào)度系統(tǒng)
目前版本的爬蟲系統(tǒng)的啟動、停止、重啟只能通過登錄每臺虛擬機(jī)通過命令行的方式進(jìn)行操作,費時費力。采用圖形化的調(diào)度處理,點點按鈕就可以啟動、停止爬蟲線程,方便快捷,而且可以實時監(jiān)控爬蟲的運行狀態(tài)。
初步規(guī)劃使用可視化調(diào)度架構(gòu)Dagobah實現(xiàn)。改變爬蟲部署環(huán)境
目前爬蟲部署方式是,在服務(wù)器下用VMWare建立多個Linux虛擬機(jī),分別用來部署爬蟲。這種方式的缺