2010-03-17 181 views
0

我想抓取網站並將內容存儲在我的計算機上供以後分析。但是,我的操作系統文件系統對子目錄的數量有限制,這意味着存儲原始文件夾結構不起作用。如何存儲從網站抓取的數據

對此提出建議?

將URL映射到某個文件名,以便可以平鋪存儲?或者只是將它推入像sqlite這樣的數據庫中以避免文件系統限制?

回答

3

這一切都取決於您有意抓取的文本和/或網頁的有效數量。一個通用的解決方法是

  • 使用RDBMS(各種各樣的SQL服務器),存儲與網頁相關的元數據。
    這樣的信息將被存儲在一個簡單的表格中(可能只有很少的支持/相關表格),其中包含Url,FileName(你將要保存的地方),Offset in File(保存的地方)幾個頁面在同一個文件中)抓取日期,大小和其他一些字段。
  • 使用適當文本的平面文件存儲。
    文件名和路徑很少(即路徑可能較淺,名稱會隱藏/自動生成)。該名稱/路徑存儲在元數據中。多個已爬網頁面存儲在同一個平面文件中,以優化操作系統的開銷以管理太多文件。文本本身可以按頁面壓縮(ZIP等)(通過壓縮更大的塊可以獲得很小的額外壓縮增益),從而實現每個文件的處理(不需要先解壓所有文本! )。使用壓縮的決定取決於各種因素;壓縮/解壓縮開銷通常相對較小,並且在CPU空間上提供了很好的節省空間,並且通常提供磁盤I/O性能。

此方法的優點是DBMS保持較小狀態,但可用於SQL驅動的查詢(特設或編程性質)查詢各種條件。與在SQL服務器本身內存儲許多/大文件相關聯,通常沒有什麼收穫(並且很多頭痛)。此外,當每個頁面被處理/分析時,可以將額外的元數據(例如標題,語言,大多數重複的5個單詞,等等)添加到數據庫中。

+0

我將抓取大約10GB的文本。這聽起來像是一個很好的妥協。 – hoju 2010-03-17 05:58:37

+0

@mjv爲它讚不絕口,你能寫出如何讓hadoop hdfs介入這個解決方案之間嗎? – 2015-12-28 12:19:07

1

將其存儲在數據庫中將有助於搜索內容和頁面基礎數據。您還可以嘗試內存數據庫或「存儲緩存」,如存儲加速。

1

根據將執行數據挖掘的PC的處理能力,您可以將抓取的數據添加到可壓縮存檔,如7zip,zip或tarball。您將能夠保持目錄結構完整無缺,並最終可以節省大量的磁盤空間 - 如果這恰好是一個問題。

另一方面,像SqLite這樣的RDBMS會迅速膨脹,但不會介意可怕的長目錄層次結構。

+1

也許網頁內容在存儲到數據庫之前可能會被壓縮 – hoju 2010-03-17 05:25:26

+0

相當正確。 :) 祝你好運。 – Kivin 2010-03-17 09:09:51