刮刮AngularJS应用程序

我正在使用Nokogiri在Rails中删除一些HTML页面。

当我试图废弃AngularJS页面时遇到了一些问题,因为gem在完全呈现之前打开了HTML。

有没有办法废弃这种类型的页面? 如何在抓取页面之前完全呈现页面?

如果你试图以完全通用的方式抓取AngularJS页面,那么你可能需要像@tadman在评论中提到的那样(PhantomJS) – 某种类型的无头浏览器完全处理AngularJS JavaScript并打开之后的DOM直到检查。

如果您有一个或多个特定的站点,那么阻力最小的路径可能会完全避免AngularJS前端,并直接查询Angular代码从中提取内容的API。 许多/大多数AngularJS站点的标准方案是,他们下拉静态JS和HTML代码/模板,然后他们将ajax调用回服务器(他们自己或某些第三方API)以获取将要的内容渲染。 如果你看看他们的代码,你可以直接查询任何角度调用(即通过$ http,ngResource或restangular)。 返回数据通常是JSON,并且在后期渲染的html结果中更容易收集而不是真正的抓取。

您可以使用:

require 'phantomjs' require 'watir' b = Watir::Browser.new(:phantomjs) b.goto URL doc = Nokogiri::HTML(b.html) 

在http://phantomjs.org/download.html下载phantomjs并移动/ usr / bin的二进制文件