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