最好的方法来抓取混合内容的一组网页

我正在试着用今天的菜单来展示办公室周围的午餐场所。 但问题是提供午餐菜单的网站并不总是提供相同types的内容。

例如,一些网站提供了一个不错的JSON输出。 看看这个 ,它提供了英文/芬兰的课程名称分开,我需要的一切都可用。 还有其他几个像这样的。

但其他人,并不总是有一个很好的输出。 像这样 内容是用简单的HTML布局的,而英文和芬兰的食物名称并不是完全有序的。 同样的食物性质,如(L,VL,VS,G等)只是正常的文字,如食品的名称。

你认为什么是以不同格式提取所有可用数据并将其转换为可用数据的最佳方法? 我试图用Node.js(&phantomjs等)制作一个刮板,但是它只能在一个网站上运行,而且在食品名称不正确的情况下。

提前致谢。

你可以使用类似kimonolabs.com的东西,他们更容易使用,他们给你的API更新你的一面。 请记住,它们是表格数据内容的最佳select。

在那里,我可以有一个简单的algorithm解决问题,如果有一个所有可用的食物名称列表,这可能是非常有用的,你会发现一个食品名称(在今天)的发生。

如果没有任何食物清单,您可以使用TF / IDF。 TF / IDF允许计算当前文档和其他文档之间的文档中的单词的分数。 但是这个解决scheme需要足够的数据来工作

我认为最好的解决办法是这样的:

  1. 创build一个应该报废的所有可用网站的列表。
  2. 为每个网站数据编写驱动程序类。
  3. 每个司机都有责任从其标准文件中创build一般域名实体。

如果你可以使用PHP, 简单的HTML Domparsing器和Guzzle将是一个不错的select。 这两个将提供一个类似jQuery的path查找器和一个很好的包装器。

你触摸真的很难的问题。 不幸的是没有简单的解决scheme。

其实有两个不同的部分要解决:

  1. 数据来自不同的来源
  2. 数据集成

从第一个问题开始 – 从不同来源获取数据。 在我的项目中,我通常在几个步骤中处理数据。 我为所有我想要的特定站点提供专用刮板,并按以下顺序处理它们:

  1. 取原始页面(非结构化数据)
  2. 从页面提取数据(非结构化数据)
  3. 提取,转换并将数据映射到页面特定的模型(完全结构化的数据)
  4. 将数据从完全结构化模型映射到通用/规范化模型

步骤1-2是以抓取为导向的,步骤3-4是严格的数据抽取/数据集成导向。

虽然使用自己的webscrapers或利用现有的web服务可以轻松实现步骤1-2,但数据集成是您的案例中最困难的部分。 您可能需要一些机器学习技术(浅层,特定领域的自然语言处理)以及自定义启发式技术。

如果像这样一个混乱的input,我会分别处理线,并使用一些字典摆脱芬兰/英文单词,并分析了什么离开。 但在这种情况下,由于人为input错误的可能性,它绝对不会100%准确。

我也担心你的堆栈不太适合做这样的任务。 对于这样的处理,我正在利用Java / Groovy和集成框架(Mule ESB / Spring Integration)来协调数据处理。

总之:这是一个非常困难和复杂的问题。 我宁愿承担更less的input数据覆盖,而不是要100%准确(除非真的值得)。