Ruby 抓取AngularJS应用程序
我正在使用Nokogiri使用Rails废弃一些HTML页面 我在尝试废弃AngularJS页面时遇到了一些问题,因为gem在完全呈现之前就打开了HTMLRuby 抓取AngularJS应用程序,ruby,angularjs,web-scraping,nokogiri,Ruby,Angularjs,Web Scraping,Nokogiri,我正在使用Nokogiri使用Rails废弃一些HTML页面 我在尝试废弃AngularJS页面时遇到了一些问题,因为gem在完全呈现之前就打开了HTML 有什么方法可以废弃这种类型的页面吗?如何在抓取之前完整呈现页面?如果您试图以完全通用的方式抓取AngularJS页面,那么您可能需要类似@tadman在评论中提到的内容(PhantomJS)--某种类型的无头浏览器,它完全处理AngularJS JavaScript,并打开DOM供以后检查 如果您有一个或多个特定的站点,那么阻力最小的路径可能
有什么方法可以废弃这种类型的页面吗?如何在抓取之前完整呈现页面?如果您试图以完全通用的方式抓取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并不简单,但是大多数网站都不想因为这种行为而受到刮伤和内置保护,当你需要多重身份验证才能得到响应时,再创建一个简单的呼叫也不简单