網路爬蟲(2) 儲存

2021-09-22 07:17:10 字數 1930 閱讀 8310

目前我想到的儲存方案有兩種:單檔案單頁面儲存和單檔案多頁面儲存。

單檔案單頁面儲存就是乙個頁面儲存在乙個檔案中,檔名稱可以使用頁面編號doc_id。這種方案查詢的時候容易定位,直接使用檔名就可以,缺點是會產生大量瑣碎的檔案,管理、冗餘和查詢感覺都不太方便。

單檔案多頁面儲存即乙個檔案儲存多個頁面,寫滿乙個檔案後,自動開始寫下乙個。每個檔案有乙個編號store_file_id,在查詢某乙個頁面的時候,通過頁面的編號doc_id,可以找到對應的store_file_id及頁面在檔案中的位置position,然後就能找個這個頁面。每個檔案的大小是可以定製的,預設200m乙個。乙個頁面的資料不會分在兩個檔案中,只會在乙個頁面寫入完成後,才會發生寫新檔案的操作,所以儲存實際的大小會是200m多幾十k。

目前採用的就是單檔案多頁面的儲存方式。其中的每個頁面又按以下格式存放資料:

doc_id:頁面文件編號,unsigned int,該頁面的url的md5簽名。

timestamp:頁面的抓取時間,time_t型別。

is_analyzed:該頁面是否已經分析,bool(short)型別。

url_length:該頁面url的長度,unsigned int。

url:該頁面的url,長度為url_length的char陣列。

domain_length:網域名稱的長度,unsigned int,類似url_length。

domain:網域名稱,長度為domain_length的char陣列,類似url。

response_length:響應的長度,unsigned int,類似url_length。

response:響應的內容,長度為response_length的char陣列,類似url。

儲存格式圖示如下(單一儲存檔案):

store模組中的主要函式如下:

/*

* 初始化檔案儲存,在呼叫store_page方法前,必須先呼叫此方法。

* @store_path 儲存路徑

* @store_file_max_length 儲存檔案的最大長度,單位是位元組

*/extern

int initial_store(char* store_path, unsigned long store_file_max_length);

/** 關閉檔案儲存

*/extern

int close_store();

/** 將頁面儲存到磁碟

* @page 要儲存的頁面

*/extern

int store_page(page* page);

/** 取得下乙個未分析的頁面

* @page 用於存在資料的頁面

* @return 成功返回0,出錯返回-1,沒有未分析的頁面,返回1

*/extern

int get_page_to_parse(page* page);

initial_store和close_store這對方法用於開始和結束。initial_store會根據給出的store_path自動計算出下乙個要寫入的檔案的編號和位置。close_store負責關閉檔案指標,這兩個函式在主程式**現,且只出現一次:initial_store在出程式的開始,close_store在主程式的結束。

store_page和get_page_to_parse這對方法用於寫入和讀出。store_page將給出的page結構體寫入檔案,同時負責新儲存檔案的建立等。get_page_to_parse則負責讀取下乙個要分析的頁面,儲存在page指標中。get_page_to_parse還會將這次讀取給出的檔案在磁碟中標記為已分析。

這裡的分析的含義僅指提取頁面中的url。

爬蟲 2初學Python網路爬蟲

2 網路爬蟲的限制 3 robotst協議 4 robots協議的遵守方式 web伺服器預設接收人類訪問,受限於編寫水平和目的,網路爬蟲將會為web伺服器帶來巨大的資源開銷 伺服器上的資料有產權歸屬,網路爬蟲獲取資料後牟利將帶來法律風險 網路爬蟲可能具備突破簡單訪問控制的能力,獲得被保護資料 從而洩...

Python 網路爬蟲 2

1 urlopen 方法中有乙個可選引數timeout,用於設定連線的超時時間,單位秒 2 如何從urlopen 的返回物件中獲取http狀態碼 resp urllib.request.urlopen url code response.getcode 3 在客戶端和伺服器之間進行請求 響應時,常用...

網路爬蟲十二 儲存頁面

在爬蟲系統中資料的流量相當大,要處理的資料內容不僅包括爬蟲系統的各種資料結構空間,而且包括從外部節點中得到的各種資料,比如http請求,html頁面,robot.txt等等。如果對這些內容處理不當,那麼不僅造成空間的冗餘浪費,使爬蟲程式效率降低,而且還可能會使系統崩潰。所以,要有合適的空間分配策略。...