2

我正在寻找围绕我们的 webcrawling perl 脚本开发一个管理和管理解决方案。基本上,现在我们的脚本保存在 SVN 中,并由 SysAdmin/devs 等手动启动。每次我们需要从新来源检索数据时,我们都必须创建一个包含业务指令和目标的工单。正如您可以想象的那样,这不是最佳解决方案。

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

  1. 数据检索具有“概念结构”,因为缺少更好的短语,即信息检索遵循特定路径
  2. 我们只是在寻找非常具体的信息,因此我们不必担心一段时间内的大量爬网(想想成千上万的页面与数百万的页面)
  3. 抓取是基于 url 而不是基于站点的。

随着我将此 alpha 版本增强为更生产级的 beta,我希望添加数据检索的自动化和管理。此外,我们的其他系统是 Java(我更精通),我想对 perl 方面进行划分,这样我们就不必严重依赖外部帮助。

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

所以我想听听您对以下架构的看法。

我想创建一个解决方案

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

一个示例用例是

  1. 数据分析师向我们提出了爬虫的要求
  2. perl 开发人员创建所需的脚本并使用此 webapp 提交脚本(保存到文件系统)
  3. 脚本从带有特定参数的 webapp 启动....

webapp应该能够创建perl脚本的多个线程来启动多个爬虫。

所以问题是

  1. 你怎么看
  2. Java 和 Perl 之间的集成有多牢固,特别是从 java 调用 perl
  3. 有人使用过这样的系统,它实际上是 perl 存储库的一部分

真正的目标是不要有一大堆杂乱无章的 perl 脚本,并对我们的信息检索进行一些管理和组织。另外,我知道我可以使用 perl 做我们想要的 web 部分——但正如我之前提到的——试图让 perl 保持专注。但看起来我并不反对把它变成一个全 perl 的解决方案。

接受任何所有建议和意见。

谢谢

4

3 回答 3

1

在使用 Lucene 使用 Java 创建爬虫方面,我有相当多的经验,事实上,我之前已经回答了一个相关问题,关于 Web 爬虫的实际创建过程和结构。这并不直接适用于您的问题,但我认为这里值得一提。

无论如何,我必须同意Stephen C,你最好使用纯 Java 或纯 perl 解决方案,而不是两者的混合,但是我的观点是基于它们彼此完全不同并且锤击两个(或更多)不同的心态通常不是一个人可以做的最理想的事情。

你所描述的也让我考虑改进我自己的爬虫(我在第一段中链接的另一个答案中引用的那个),主要是关于实际爬取模式的部分。虽然我确实相信开发一种手动指示 Java 应用程序以特定模式抓取某些 URL 的方法需要花费更多的时间,就像在 perl 中一样,但在 Java 中这样做最终会导致更多可用的部分具有各种有趣的小功能的软件,维护起来并不痛苦。

另一方面,Java 的脚本方面有点笨拙,有一个脚本 API,但由于脚本是关于松散地定义你想要做什么,而 Java 有时可能会非常严格,它并不像人们希望的那样灵活。

要真正发表意见,我认为您应该尽量减少难以维护的编程语言部分。我不知道它适合你,但我假设是 perl。基本上致力于其中一种语言并充分使用它,不要使用另一种语言作为捷径。

于 2009-12-22T07:36:25.753 回答
1

Java 和 Perl 之间的集成有多牢固,特别是从 java 调用 perl

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

接受任何所有建议和意见。

如果您使用纯 Perl 或纯 Java,IMO 您将获得更易于维护的解决方案。如果这意味着你必须学习 Perl,那就这样吧。(用 Perl 编写结构良好、可维护的应用程序是可能的。你只需要遵守纪律。)

于 2009-12-22T07:18:18.163 回答
0

您可以尝试使用 HtmlUnit 或 Selenium 进行网络爬虫,并使用 Quartz 进行调度,或者将整个项目放在 Glassfish 等应用程序服务器中。如果你想坚持使用 Perl,你可能会使用 crontab。可用于网络爬虫的 Perl API 可能没有适当的 cookie 处理。我希望这对你来说不是问题。我知道的唯一 hack 就是调用 wget。

于 2010-03-13T17:40:15.393 回答