如何获取网页的完整来源以便我可以访问价格?我正在尝试从链接“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
答案 0 :(得分:2)
如果您使用wget
或curl
等命令行工具下载源代码,您会发现源代码中没有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