Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
爬行引擎体系结构-Java/Perl集成_Java_Perl_Hadoop_Nutch_Web Crawler - Fatal编程技术网

爬行引擎体系结构-Java/Perl集成

爬行引擎体系结构-Java/Perl集成,java,perl,hadoop,nutch,web-crawler,Java,Perl,Hadoop,Nutch,Web Crawler,我希望围绕我们的webcrawling perl脚本开发一个管理和管理解决方案。基本上,现在我们的脚本保存在SVN中,并由SysAdmin/devs等手动启动。每当我们需要从新源检索数据时,我们必须创建一个带有业务说明和目标的记录单。正如你所想象的,这不是一个最优的解决方案 该系统有3个一致的主题: 由于缺少更好的短语,数据检索具有“概念结构”,即信息检索遵循特定路径 我们只寻找非常具体的信息,所以我们暂时不必担心大量的爬行(想想成千上万的页面和数百万的页面) 爬网是基于url的,而不是基于站点

我希望围绕我们的webcrawling perl脚本开发一个管理和管理解决方案。基本上,现在我们的脚本保存在SVN中,并由SysAdmin/devs等手动启动。每当我们需要从新源检索数据时,我们必须创建一个带有业务说明和目标的记录单。正如你所想象的,这不是一个最优的解决方案

该系统有3个一致的主题:

  • 由于缺少更好的短语,数据检索具有“概念结构”,即信息检索遵循特定路径
  • 我们只寻找非常具体的信息,所以我们暂时不必担心大量的爬行(想想成千上万的页面和数百万的页面)
  • 爬网是基于url的,而不是基于站点的 随着我将这个alpha版本提升到更高的生产级别beta版,我希望增加数据检索的自动化和管理。此外,我们的其他系统是Java(我更精通Java),我想划分perl方面,这样我们就不必过分依赖外部帮助

    我已经评估了常见的疑点,等等,但是花在修改这些框架以适应我们特定的信息检索上的时间是不合理的

    因此,我想听听您对以下体系结构的看法

    我想创建一个解决方案

    • 使用Java作为管理和执行perl脚本的接口
    • 使用Java进行配置和数据访问
    • 坚持使用perl进行检索
    一个示例用例是

  • 数据分析师向我们提供了爬行的需求
  • perl developer创建所需的脚本并使用此webapp提交脚本(保存到文件系统)
  • 使用特定参数从webapp启动脚本
  • Webapp应该能够创建perl脚本的多个线程来启动多个爬虫程序

    所以问题是

  • 你觉得怎么样
  • Java和Perl之间的集成,特别是从Java调用Perl,有多可靠
  • 有人使用过这样一个系统,它实际上是perl存储库的一部分吗
  • 我们的目标实际上是不要有一大堆无组织的perl脚本,并对我们的信息检索进行一些管理和组织。另外,我知道我可以使用perl做我们想要做的web部分——但正如我前面提到的那样——努力保持perl的重点。但是,我似乎并不反对将其作为一个纯perl解决方案

    接受任何建议和意见

    谢谢

    Java和Perl之间的集成,特别是从Java调用Perl,有多可靠

    在我看来,从Java调用Perl的最佳方法是让Java在单独的进程中启动Perl程序。您可以尝试使用JNI/JNA直接从Java调用Perl,但很难做到正确。如果你搞错了,你将处理崩溃的JVM

    接受任何建议和意见


    在我看来,如果使用纯Perl或纯Java,您将得到一个更易于维护的解决方案。如果这意味着您必须学习Perl,那么就这样吧。(用Perl编写结构良好、可维护的应用程序是可能的。你只需要遵守规则即可。)

    我曾经用Lucene用Java创建过爬虫程序,事实上我以前回答过一个有关web爬虫程序的实际创建过程和结构的相关问题。这并不直接适用于你的问题,但我认为值得在这里提及

    无论如何,我必须同意,最好使用纯Java或纯perl解决方案,而不是两者的混合,然而我的观点是基于这样一个事实,即它们彼此完全不同,将两种(或更多)不同的思维定势融合在一起通常不是一个人能做的最理想的事情

    您所描述的内容也让我思考如何改进我自己的爬虫程序(我在第一段中链接的另一个答案中引用的爬虫程序),主要是关于实际爬虫模式的部分。虽然我确实相信,开发一种手动指示Java应用程序以特定模式抓取某个URL的方法会花费更多的时间,就像在perl中一样,在Java中这样做最终会产生一个更有用的软件,它有各种有趣的小特性,维护起来也不会很痛苦

    另一方面,Java的脚本方面有点简单,有一个脚本API,但由于脚本只是松散地定义您想要做的事情,Java有时会非常严格,所以它不像人们希望的那样灵活


    要真正给出一个意见,我认为您应该尽量减少编程语言中较难维护的部分。我不知道这是给你的,但我想是perl。基本上,使用其中一种语言并充分使用它,不要将另一种语言用作快捷方式。

    您可以尝试使用HtmlUnit或Selenium进行网络绘图,并使用Quartz进行调度,或者将整个项目放在应用服务器(如Glassfish)中。如果您想继续使用Perl,您可以使用crontab。可用于webcrawling的Perl API可能没有正确的cookie处理。我希望这对你来说不是问题。我所知道的唯一一个黑客就是打电话给wget。

    谢谢Stephen和Esko。本能地,我也有同样的感觉。我自己对混搭感觉不太舒服。我会让你知道我们最终的决定。