使用Ruby中的Nokogiri阅读整个HTML源代码

时间:2015-11-22 05:29:31

标签: ruby web-scraping nokogiri

如何获取网页的完整来源以便我可以访问价格?我正在尝试从链接“https://www.udemy.com/video-editing-for-instructors/?ccManual=&dtcode=RI7hLVu42dR7&couponCode=9dollarenrollment

获取CSS类”.old-price“

我认为我遇到问题的原因是由于这个Udemy代码

   data-wrapcss = "static-content-wrapper payment-popup"
   data-passDtCode="true"
   data-enableLoader="true"
   data-purpose="take-this-course-button"
           data-overlayClosable="false"

Nokogiri正在跳过那个容器中的代码,这个代码有一些我想要的信息。 这是我的代码试图让它工作:

require 'nokogiri'
require 'open-uri' 
page = Nokogiri::HTML(open("https://www.udemy.com/video-editing-for-instructors/?ccManual=&dtcode=RI7hLVu42dR7&couponCode=9dollarenrollment"))
puts page.css('.old-price') #this doesn't showcase anything, I want it to show the price of $89

2 个答案:

答案 0 :(得分:2)

如果您使用wgetcurl等命令行工具下载源代码,您会发现源代码中没有old-price这样的内容。因此,通过解释JavaScript的浏览器的魔力可能会出现类和旧价格。 Nokogiri不解释JavaScript,因此找不到您要找的课程。

如果要自动抓取支持JavaScript的网页,则必须使用能够理解JavaScript的工具。测试框架Capybara可能与一个支持JavaScript的驱动程序(如WebKit或Poltergeist)一起使用。我相信还有其他选择。

获得标记后,如果需要,仍可使用Nokogiri。这是一个很好的解析器。 Capybara在Nokogiri之上建造了一些漂亮的发现者。

替代方法:如果您启动浏览器的开发人员工具并转到网络选项卡,您将看到Web服务器向www.udemy.com发出大量请求。其中一个将包含旧价格作为标记或JSON或XML等数据。这可能是一种更简单的方法。或者不是 - API可能是安全的,因此无法从命令行调用它。

答案 1 :(得分:0)

元素将是:

page.at('.old-price')

HTML(在libxml使用它之后)将是:

page.to_s

原始HTML将是:

open(url).read