【问题标题】:how to store data crawled from website如何存储从网站爬取的数据
【发布时间】:2011-01-28 10:16:46
【问题描述】:

我想抓取一个网站并将内容存储在我的计算机上以供以后分析。但是我的 OS 文件系统对子目录的数量有限制,这意味着无法存储原始文件夹结构。

建议?

将 URL 映射到某个文件名以便可以平坦存储?或者只是将其塞入像 sqlite 这样的数据库中以避免文件系统限制?

【问题讨论】:

    标签: database filesystems web-crawler


    【解决方案1】:

    这完全取决于您打算抓取的文本和/或网页的有效数量。一个通用的解决方案可能是

    • 使用 RDBMS(各种 SQL 服务器)来存储与页面关联的元数据。
      此类信息将存储在一个简单的表中(可能包含很少的支持/相关表),其中包含诸如 Url、FileName(您将保存它的位置)、存储在 File 中的偏移量等字段(这个想法是保留几页在同一个文件中)抓取日期、大小和其他一些字段。
    • 正确使用平面文件存储文本。
      文件名和路径无关紧要(即路径可能很浅,并且名称神秘/自动生成)。此名称/路径存储在元数据中。多个爬取的页面存储在同一个平面文件中,以优化操作系统管理过多文件的开销。文本本身可以按页面压缩(ZIP 等)(压缩更大的块几乎没有额外的压缩增益。),允许按文件处理(无需解压缩之前的所有文本! )。使用压缩的决定取决于各种因素;在 CPU 方面,压缩/解压缩开销通常相对较小,并且可以很好地节省 HD 空间和磁盘 I/O 性能。

    这种方法的优点是 DBMS 仍然很小,但可用于 SQL 驱动的查询(具有即席或编程性质)以根据各种条件进行搜索。在 SQL Server 本身中存储许多/大文件通常没有什么好处(而且很让人头疼)。此外,在处理/分析每个页面时,可以将其他元数据(例如标题、语言、重复次数最多的 5 个单词等)添加到数据库中。

    【讨论】:

    • 我将抓取大约 10GB 的文本。这听起来像是一个很好的妥协。
    • @mjv 支持它,你能写下如何在这个解决方案之间加入 hadoop hdfs 吗?
    【解决方案2】:

    根据将进行数据挖掘的 PC 的处理能力,您可以将抓取的数据添加到 7zip、zip 或 tarball 等可压缩存档中。您将能够保持目录结构完好无损,并且最终可能会节省大量磁盘空间 - 如果这恰好是一个问题的话。

    另一方面,像 Sqlite 这样的 RDBMS 会迅速膨胀,但不会介意长得可笑的目录层次结构。

    【讨论】:

    • 也许网页内容可以在存储到数据库之前进行压缩
    【解决方案3】:

    将其保存在数据库中将有助于搜索内容和页面元数据。您还可以尝试使用内存数据库或类似“memcached”的存储来加快速度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多