[玩具]站群程式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、請求量太大,資料量太大,查詢效率低下
怎麼解決呢?沒錯,本渣渣現在根本不知道怎麼解決!