1. 程式人生 > >[玩具]站群程式DEMO版本開發小計先折騰起來是關鍵。

[玩具]站群程式DEMO版本開發小計先折騰起來是關鍵。

  用過兩個站群程式,都是從外面買的,不是自己的,多多少少在某些地方會有限制,當然想實現某些個性化的需求也是沒辦法搞的,這對於崇尚自由與開源的本渣渣是接受不了的,本著不折騰會死的原則,不如自己寫一套,能不能賺錢另說,先折騰起來是關鍵。

  結構

  一套站群程式有哪些關鍵節點?

  資料抓取(快速、海量)

  抓取內容型別

  抓取內容來源

  抓取資料入庫

  資料儲存、查詢(效能)

  資料庫的選擇

  不用型別的內容存在什麼地方

  資料關聯邏輯、資料讀寫效能

  WEB框架(輕量、可個性化定製)

  模板引擎

  demo版本的解決方案

  web框架、模板引擎

  站群下的各網站,僅用於資訊的展示,無需其他亂七八糟的功能,所以框架選輕的就可以,能展示資訊就夠用。且本渣渣寫python比寫php溜一些,所以選擇基於python的flask作為web框架。

  flask官網文件引用jinja2模板引擎,所以我這也順其自然用的jinja2

  頁面分三個型別:首頁、頻道頁、詳情頁

  資料處理

  抓取內容型別、來源

  內容型別分為:

  文字資料

  抓取百度搜索,搜尋結果正文

  抓取百度新聞,搜尋結果正文

  抓取百度搜索,搜尋結果摘要

  問答資料

  抓取百度知道,搜尋結果正文

  圖片資料

  360圖片搜尋,原始圖片地址及360快取地址

  視訊資料

  視訊資源介面

  開始網站程式和爬蟲程式都放在一臺韓國的機子上,但韓國機子抓取國內網站資料太慢,隨後將爬蟲程式分離,放在本地執行,抓回來的資料在傳到韓國主機。

  資料處理

  因為希望儘可能保證每個站群下的網站都具備可讀性強、與關鍵詞高度相關的內容,就是在外表上跟單站無任何區別。所以提取網頁中的完整正文,並過濾掉亂七八糟的內容,一個關鍵詞下的多個相關內容,已經做了關聯,在網頁上可以隨便呼叫。

  也就是說,一個詞,可以展現N條跟這個詞相關的完整正文資訊、摘要、視訊資訊、圖片資訊、問答資訊,只能效能上能夠滿足

  資料儲存

  一個頻道下有N個關鍵詞,關鍵詞資料和對應的頻道資料放在Mysql;

  爬蟲圍繞每個關鍵詞抓取內容,抓取內容存放在mongodb,每個內容型別分為一個集合。

  從mysql中呼叫關鍵詞邏輯,通過關鍵詞id,從mongodb各個集合中獲取所需要的資料

  nginx配置檔案繫結多個域名到web主程式目錄;

  PC站和移動站使用不同模板,nginx識別訪客UA做移動跳轉適配;一個nginx配置檔案下的域名,可單獨為其配置title、description、模板呼叫引數等,保證每個域名、每個頁面都是獨立的TD、獨立的正文內容

  後續問題

  目前站群程式僅僅是一個demo版本,充其量就是個玩具,已經可以上站。但根據本渣渣經驗,估計抓取關鍵詞資料上了50萬後,程式估計就跑不動了,因為資料查詢效能太渣渣。

  所以預計本渣渣還需要解決如下問題:

  1、資料抓取效率極度低下

  按一個關鍵詞需要抓取5條百度搜索結果正文、5條新聞搜尋正文、5張圖片、5個問答資料、3條視訊,還有各類搜尋引擎相關搜尋和下拉關鍵詞,需要抓取的內容量大,且只有本地一臺機子在抓資料,效率還是太慢。

  所以考慮在國內佈置多臺機子,抓取不同的資料,分發給不同的機子來負責抓取,最後所有機子抓取的資料都彙總到儲存資料的機子上。

  2、資料量太大,硬碟不夠

  按一個抓取正文平均500字算,一個詞所需要抓取的資料的字數在1萬字左右。那抓取50萬個詞,就是50億個字。

  一般小說站,儲存100萬字,大概佔用2M硬碟空間,那50億字,就是10000M,要佔用10個G的空間。聽上去感覺挺少的,But這僅僅是儲存資料所佔的容量,要為了網頁載入效能開啟靜態快取呢??

  所以,日後若上的資料量大,買硬碟空間實在太貴了,怎麼解決呢?缺乏運維經驗,現在除了插幾塊SSD,不知道還有什麼別的方法成都男人硬不起來怎麼辦?

  3、請求量太大,資料量太大,查詢效率低下

  怎麼解決呢?沒錯,本渣渣現在根本不知道怎麼解決!