从jQuery获取数据



我在使用以下代码使用 nokogiri 获取数据时遇到问题:

def run
    # load HTML content to doc
    doc = Nokogiri::HTML(open(@link))
    cells =  doc.css('div#z_full_column > div.content')
    puts cells # just to see what i've got while running code
end

从本网站:

http://www.staples.com/sbd/cre/marketing/back-to-school/back-to-school-deals/weekly-deals.html

所有数据都消失了。我只看到<div class="content"></div>.我试图在每个代码中放入sleep 5,但它没有用。也许这里的问题是由jquery引起的。

问题是我假设来自 OpenURI 类的行:

open(@link)

不幸的是,OpenURI不支持JavaScript。这意味着通过jQuery加载的页面上的任何内容都不会被OpenURI看到。这意味着JavaScript/jQuery加载的内容不会被传递给Nokogiri。

我建议切换到支持驱动真实浏览器的 gem,它将支持 JavaScript。一些受欢迎的宝石包括Watir,Selenium-Webdriver和Capybara。我更喜欢Watir,因为它的API直观。

您使用 Watir 的示例是:

require 'watir'
# Open a firefox browser
browser = Watir::Browser.new :firefox
# Go to the url
browser.goto 'http://www.staples.com/sbd/cre/marketing/back-to-school/back-to-school-deals/weekly-deals.html'
# Get the name of the displayed products
products = browser.div(:class => 'content').divs(:class => 'z_prod_mod')
puts products.collect{ |p| p.h3.text }
#=> Staples® 1-subject notebook, 8" x 10.5", wide rule, 70 sheets
#=> "RoseArt ® crayons, 24/pack
#=> etc
# Close the browser
browser.close

在浏览器中转到该 URL,然后使用 View>Source(或可比)查看浏览器中的 HTML,然后编辑>查找并键入 class="content" ,您将看到以下内容:

<div class="content"></div>

</div>

然后,如果您梳理页面上包含的所有 Javascript 脚本,您可能会找到一个向该<div>添加一些内容的脚本。 Nokogiri 不知道 JavaScript 对原始 HTML 做了什么。

相关内容

  • 没有找到相关文章

最新更新