Javascript 刮取包含混合内容的页面集的最佳方法

Javascript 刮取包含混合内容的页面集的最佳方法,javascript,json,node.js,web-scraping,web-crawler,Javascript,Json,Node.js,Web Scraping,Web Crawler,我试着给大家展示一下办公室里午餐地点的清单和他们今天的菜单。但问题是提供午餐菜单的网站并不总是提供相同的内容 例如,一些网站提供了很好的JSON输出,它分别提供英语/芬兰语课程名称,我需要的一切都可以得到。还有一些像这样的 但是,其他人并不总是有一个好的输出。内容以简单的HTML格式显示,英文和芬兰食品名称没有准确的顺序。此外,食物属性(L、VL、VS、G等)与食物名称一样都是普通文本 在您看来,将所有这些可用数据以不同格式刮取并转化为可用数据的最佳方法是什么?我试着用Node.js(&phan

我试着给大家展示一下办公室里午餐地点的清单和他们今天的菜单。但问题是提供午餐菜单的网站并不总是提供相同的内容

例如,一些网站提供了很好的JSON输出,它分别提供英语/芬兰语课程名称,我需要的一切都可以得到。还有一些像这样的

但是,其他人并不总是有一个好的输出。内容以简单的HTML格式显示,英文和芬兰食品名称没有准确的顺序。此外,食物属性(L、VL、VS、G等)与食物名称一样都是普通文本

在您看来,将所有这些可用数据以不同格式刮取并转化为可用数据的最佳方法是什么?我试着用Node.js(&phantomjs,等等)制作一个刮刀,但它只适用于一个网站,而且在食物名称的情况下并不准确


提前感谢。

您可以使用这样的东西,它们更易于使用,并且它们为您提供了API来更新您的站点。
请记住,它们最适合于表格数据内容。

对于这个问题,我有一个简单的算法解决方案,如果有一个所有可用食物名称的列表,这会非常有帮助,您可以在文档中找到食物名称(今天)

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

我认为最好的解决方案是这样的:

  • 创建一个列表,列出所有应该废弃的可用网站
  • 为每个网站数据编写驱动程序类
  • 每个驱动程序都有责任从其标准文档创建通用域实体

  • 如果您可以使用PHP,那么将是一个很好的选择。这两个将提供一个类似jQuery的路径查找器和一个围绕HTTP的漂亮包装器。

    您遇到了一个非常困难的问题。不幸的是,没有简单的解决办法

    实际上有两个不同的部分需要解决:

  • 从不同来源抓取数据
  • 数据集成
  • 让我们从第一个问题开始——从不同来源抓取数据。在我的项目中,我通常分几个步骤处理数据。我为我想要的所有特定站点配备了专用刮刀,并按以下顺序进行处理:

  • 获取原始页面(非结构化数据)
  • 从页面提取数据(非结构化数据)
  • 将数据提取、转换并映射到特定于页面的模型(完全结构化数据)
  • 将数据从完全结构化模型映射到通用/规范化模型
  • 步骤1-2面向刮取,步骤3-4严格面向数据提取/数据集成

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

    在这种混乱的输入情况下,我会单独处理行,并使用一些字典来删除芬兰语/英语单词,并分析剩下的内容。但在这种情况下,由于可能存在人为输入错误,它永远不会100%准确

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

    总而言之:这确实是一个困难而复杂的问题。我宁愿假设输入数据覆盖率较低,而不是目标为100%准确(除非它真的值得)