2010-03-17 184 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