任何JVM项目中使用(前提是添加Scala

该项目是用Scala编写的,可以在任何JVM项目中使用(前提是添加ScalaJAR依赖项)。它用于抓取文档,而不是随机数据。它可能可以扩展到这样做,但现在我希望它更多地面向(状态)文档/开放数据,而不是一个商业抓取工具(它经常被反对)。

现在,它的形式或多或少是稳定的,我已经部署了应用程序,并且工作正常,所以我将简单地介绍一下该功能。重点是只能通过配置指定刮擦。用于配置单个刮取实例。在这里,您指定了一些事情:

  • 目标URL,http方法,正文参数(在POST的情况下)。您可以放置一个占位符{x},该占位符将用于分页。
  • 文档类型(PDF、doc、HTML)和刮取工作流的类型--即如何在目标页面上到达文档。有4个选项,取决于是否有单独的详细信息页、是否只有一个表以及指向文档的链接位于何处
  • 元素的XPath表达式,包含元数据和指向文档的链接。根据信息所在的位置有不同的表达式--在表中或在单独的详细信息页中
  • 日期格式,用于文档的日期;如果XPath不能严格定位日期,则可以使用regex。
  • 简单的“启发式”--如果您知道要查找的文档的URL结构,就没有必要通过XPath找到它。
  • 其他配置,如javascript要求,刮取是否应该在错误上失败,等等。

当你有一个ExtractorDescriptor实例就绪(对于Java应用程序,您可以使用构建器创建一个实例),您可以创建一个new Extractor(descriptor),然后(通常带有预定作业)调用extractor.extractDocuments(since)

结果是一个文档列表(有两个方法-一个返回Scala列表,一个返回java列表)。

库依赖于htmlunit、nekohtml、Scala、XML-API以及其他一些在pom中可见的库。它不支持多个解析器。它也不处理抓取任务的分布式运行--您应该自己处理。目前还没有发布JAR版本或maven依赖项--如果需要,就必须签出并构建JAR版本或Maven依赖项。不过,我希望这是有用的。如果不是作为代码,那么至少作为一种通过编程从网页中获取数据的方法。

https://www.douban.com/note/824582382/

PaaS(PlatFroasaService)是一个用于沙箱环境的营销术语,可以在其中部署应用程序。沙箱通常包含大量的第三方软件,可供应用程序使用。值得注意的(与java相关的)PaaS包括GoogleAppEngine、Heroku、OpenShift、CloudBees、CloudFoundry、J弹性。

这听起来很不错--通过Web控制台配置应用程序,包括所需的服务(应用服务器、数据库、消息队列、搜索引擎),添加一些配置挂钩,一切都启动并运行。不需要手动安装东西,也不需要考虑扩展,因为这可以由平台自动处理--您只需添加更多实例/引擎/dynos/Gear/任何服务请求。

但在过去的几年里,我对其中的几个项目进行了评估,并遇到了一个严重的缺陷:软件版本。

在每个项目的开发过程中,堆栈的一部分将升级到最新版本。这要么是重要的bug修复,要么是性能的改进,或者是为了保持最新的状态。在我使用过的几乎所有项目中,我们都发现需要升级一个或多个组件。消息队列有一个严重的错误,然后NoSQL数据库需要从涵盖项目中使用的特定情况的新版本中获得一些性能改进,然后搜索引擎提供了您更愿意使用的一个很好的分布式特性。

https://movie.douban.com/doulist/148003830/

然而,托管环境很少提供最新版本(如果它们提供第三方软件的话)。它们可能会在一段时间后升级,也可能不会升级。你不能控制它。事实上(如果我错了,请纠正我),他们中的大多数人对他们提供的组件没有“版本”的概念。有时可以通过将新版本添加为一个完全独立的组件来避免这种情况,这可能意味着,即使出现了新版本,也需要重新配置所有内容。

在大多数情况下,您没有SSH访问权,即使您有SSH访问权,它也是相当有限的,您只能访问您的应用程序文件。虽然不相关,但我不能忽略PaaS通常有一个命令行接口,您可以下载这个接口来管理您的部署。命令行管理没有什么坏处,但他们所做的是用一个专用工具来代替原生Linux命令行管理,来做大致相同的事情。不是什么好处。

https://www.douban.com/doulist/148003830/?type=followers

我最后一次尝试的是OpenShift,但我很早就碰到了砖墙--它们只支持Maven 3.0.3(最新版本为3.1.0),项目中使用的一些插件至少需要3.0.4。使用GoogleAppEngine,我*使用sevlet2.5而不是3.0。和Heroku有类似的事我都不记得了。Amazon的EC2不是PaaS(它是IaaS),但它有Bean秸秆,它有点像顶部的PaaS层,最新版本的Tomcat在那里是不可用的。

如果您确信应该使用PaaS,那么就开始对应用程序进行更改,使其符合平台的沙箱。您降低了插件的级别,在这里编写了一个难看的解决方案,编写了更多的配置,新版本可能需要更少的配置。如果是关于宠物项目(就像我的例子),那可能没问题。但是,随着商业项目的最后期限,由一个大的团队编写,这是一个交易的破坏者。

我不是一个反PaaS的拥护者,但我认为提供者应该真正解决版本问题(而且这是不平凡的)。PaaS是否有足够的好处可以忽略版本问题,这是一个单独的

   
上一篇:快学Scala系列(特质)


下一篇:快学Scala第一天