【问题标题】:How should I store scraped HTML in my webapp?我应该如何将抓取的 HTML 存储在我的 web 应用程序中?
【发布时间】:2012-11-30 00:25:01
【问题描述】:

我是 Web 开发(和一般开发)的新手,我正在构建一个从第三方网站抓取数据的 Rails 应用程序。我正在使用 Nokogiri 解析我感兴趣的特定 html 元素,这些元素存储在数据库中。

但是,我想保存我正在抓取的整个页面的 html 作为备份,以防我改变了我想要的信息类型以及网站删除该网站(或更新它)。

存储归档 html 的最佳做法是什么? 我应该将其提取为字符串并将其放入数据库中,将其写入日志或文本文件,还是什么?

编辑:
我应该澄清一下。我每周要爬取大约 10K 个网站,如果我重新定义我想要的数据类型,我预计只需要一次性访问备份。

举个例子,如果正在爬取联合国关于国家人口数据的数据,最初是在查看年龄分布,但后来意识到我也想获得性别分布,我想回到我所有的 HTML 档案并拉出数据。我预计这种情况不会发生太多(可能每月 1-3 次),但当它发生时,我会想在 10K-100K 列表中检索它。这项任务应该只需要几个小时来完成大约 10K 条记录,所以我猜每个网站提取最多需要一秒钟。我不需要任何版本控制功能。希望这可以澄清。

【问题讨论】:

  • “最佳”是高度主观的,取决于您的实际需要。你会保留版本历史吗?你需要搜索它吗?经常找回吗?等等等等。
  • 我编辑了这个问题,以便更清楚地了解我需要什么。让我知道是否可以澄清。

标签: ruby-on-rails screen-scraping web-scraping


【解决方案1】:

我不确定这种情况下的“最佳实践”是什么(它会因您的项目的具体情况而异),但作为起点,我建议创建一个带有 URL 和字符串字段的模型HTML 本身的文本字段,并将页面保存在那里。您可以为 URL 添加唯一性验证器,以确保不会两次存储相同的 HTML。

然后您可以选择添加模型方法以从 HTML 文本启动 nokogiri 文档,从而使用 HTML 字符串作为“主”记录(在 DB 中)并在需要时动态生成 nokogiri 文档。但同样,正如@dave-newton 指出的那样,这在很大程度上取决于您将如何处理此 HTML。

【讨论】:

  • 谢谢,我认为这可能对我正在做的事情有意义。我编辑了这个问题,以便更好地了解我的需求 - 让我知道是否可以澄清。
  • 请阅读您添加的注释。由于您事先不知道将来需要什么数据,而且您实际上并不需要针对检索进行优化,所以我认为我描述的方法可以正常工作。
【解决方案2】:

我强烈建议将其保存到与您正在抓取的数据相同的数据库中的表中。为什么要改变有效的方法?像往常一样保留所有内容,或将其全部写入单独的数据库以防万一,并保留某种形式或引用以将抓取的数据链接到备份以防万一。

【讨论】:

    猜你喜欢
    • 2020-11-28
    • 2015-11-24
    • 2015-02-09
    • 2015-02-21
    • 2011-02-15
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多