Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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
Ruby 抓取AngularJS应用程序_Ruby_Angularjs_Web Scraping_Nokogiri - Fatal编程技术网

Ruby 抓取AngularJS应用程序

Ruby 抓取AngularJS应用程序,ruby,angularjs,web-scraping,nokogiri,Ruby,Angularjs,Web Scraping,Nokogiri,我正在使用Nokogiri使用Rails废弃一些HTML页面 我在尝试废弃AngularJS页面时遇到了一些问题,因为gem在完全呈现之前就打开了HTML 有什么方法可以废弃这种类型的页面吗?如何在抓取之前完整呈现页面?如果您试图以完全通用的方式抓取AngularJS页面,那么您可能需要类似@tadman在评论中提到的内容(PhantomJS)--某种类型的无头浏览器,它完全处理AngularJS JavaScript,并打开DOM供以后检查 如果您有一个或多个特定的站点,那么阻力最小的路径可能

我正在使用Nokogiri使用Rails废弃一些HTML页面

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


有什么方法可以废弃这种类型的页面吗?如何在抓取之前完整呈现页面?

如果您试图以完全通用的方式抓取AngularJS页面,那么您可能需要类似@tadman在评论中提到的内容(PhantomJS)--某种类型的无头浏览器,它完全处理AngularJS JavaScript,并打开DOM供以后检查


如果您有一个或多个特定的站点,那么阻力最小的路径可能会完全避开AngularJS前端,直接查询Angular代码从中提取内容的API。许多/大多数AngularJS站点的标准场景是,它们下拉静态JS和HTML代码/模板,然后向服务器(它们自己的或某些第三方API)进行ajax调用,以获取将要呈现的内容。如果您查看他们的代码,您可能会直接查询angular正在调用的任何东西(即通过$http、ngResource或Restanglar)。返回数据通常是JSON,与后期呈现的html结果中的真实抓取相比,更容易收集。

如果您试图以完全通用的方式抓取AngularJS页面,那么您可能需要类似于@tadman在评论中提到的内容(PhantomJS)--某种类型的无头浏览器,它完全处理AngularJS JavaScript,并打开DOM供以后检查

如果您有一个或多个特定的站点,那么阻力最小的路径可能会完全避开AngularJS前端,直接查询Angular代码从中提取内容的API。许多/大多数AngularJS站点的标准场景是,它们下拉静态JS和HTML代码/模板,然后向服务器(它们自己的或某些第三方API)进行ajax调用,以获取将要呈现的内容。如果您查看他们的代码,您可能会直接查询angular正在调用的任何东西(即通过$http、ngResource或Restanglar)。返回数据通常是JSON,与后期呈现的html结果中的真实抓取相比,更易于收集。

您可以使用:

require 'phantomjs'
require 'watir'

b = Watir::Browser.new(:phantomjs)
b.goto URL

doc = Nokogiri::HTML(b.html)
在中下载phantomjs并移动/usr/bin的二进制文件,您可以使用:

require 'phantomjs'
require 'watir'

b = Watir::Browser.new(:phantomjs)
b.goto URL

doc = Nokogiri::HTML(b.html)

在中下载phantomjs并移动/usr/bin的二进制文件

您可能需要使用类似的方法来完全呈现包含JavaScript的页面。问题是页面正在动态加载内容。关闭浏览器中的JavaScript,点击页面,您将看到代码所看到的内容,因为此时的代码或浏览器都不会解释和运行JavaScript。Nokogiri没有“打开HTML”的方法,它只解析提供给它的内容。您可能需要使用类似的方法来完全呈现带有JavaScript的页面。问题是页面正在动态加载内容。关闭浏览器中的JavaScript,点击页面,您将看到代码所看到的内容,因为此时的代码或浏览器都不会解释和运行JavaScript。Nokogiri没有“打开HTML”的方法,它只解析提供给它的内容。回答不错@Mike但是大多数网站都不想被刮去,并且内置了这种行为的保护,当你需要多重身份验证才能得到响应时,再创建一个简单的呼叫@Mike并不简单,但是大多数网站都不想因为这种行为而受到刮伤和内置保护,当你需要多重身份验证才能得到响应时,再创建一个简单的呼叫也不简单