1

このコードで 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 が原因である可能性があります。

4

2 に答える 2

1

ブラウザでその URL に移動し、[表示] > [ソース] (または同等のもの) を使用してブラウザで HTML を確認し、[編集] > [検索] を使用して を入力すると、次のように表示されますclass="content"

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



</div>

次に、ページに含まれるすべての Javascript スクリプトをくまなく調べると、おそらくそれに何らかのコンテンツを追加するスクリプトが見つかるでしょう<div>。のこぎりは、JavaScript が元の HTML に対して何を行うかを知りません。

于 2013-09-10T04:33:56.880 に答える
1

問題は、OpenURI クラスからのものであると私が推測する行です。

open(@link)

残念ながら、OpenURI は JavaScript をサポートしていません。つまり、jQuery を介してロードされたページ上のものは、OpenURI からは見えません。これは、JavaScript/jQuery で読み込まれたコンテンツが Nokogiri に渡されないことを意味します。

JavaScript をサポートする実際のブラウザーの駆動をサポートする gem に切り替えることをお勧めします。人気のある gem には、Watir、Selenium-Webdriver、Capybara などがあります。直感的な API があるため、私は Watir を好みます。

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
于 2013-09-10T13:15:49.033 に答える