2

Nokogiri の「ノーベル賞受賞者のリスト」から行をスクレイピングするのに問題があります。

CSS セレクターは正しいと思いますが、空が返されます。

元のチュートリアルは「Web クローラーの作成」です。

require 'rubygems'
require 'nokogiri'
require 'open-uri'

BASE_WIKIPEDIA_URL = 'http://en.wikipedia.org/'
LIST_URL = "#{BASE_WIKIPEDIA_URL}/wiki/List_of_Nobel_laureates"

page = Nokogiri::HTML(open(LIST_URL))
rows = page.css('div#content.mw-body div#bodyContent div#mw-content-text.mw-content-ltr table.wikitable.sortable.jquery-tablesorter tr')

puts "length : #{rows.size}"
4

2 に答える 2

2

クラスjquery-tablesorterを持つテーブルを期待していることがわかります。これは、ブラウザでテーブルを調べていて、そのクラスがあるためです。問題は、ページの読み込み後に jquery がそのクラスを追加することです。しかし、open-uri は JavaScript を処理しないため、nokogiri が参照するテーブルにそのクラスが追加されることはありません。

簡単に言えば、おそらく次のものだけを使いたいと思うでしょう:

page.css('table.wikitable tr')
于 2013-06-24T06:53:47.747 に答える
2

2 つの問題があります。

  1. 作成している URL に二重スラッシュがあるため、実際に見ていると思っているページを実際に見ているわけではありません。使用している URL は次のとおりhttp://en.wikipedia.org//wiki/List_of_Nobel_laureatesです。リンクをたどると、Wikipedia のホームページにリダイレクトされることがわかります。

  2. CSS セレクターが具体的すぎて、生のページ ソースには存在しない情報が含まれています。より単純なセレクターを試してください。

    rows = page.css('table.wikitable tr')
    

    具体的にはjquery-tablesorter、セレクターにクラスを含めています。このクラスは JavaScript によって追加されますが、使用しているツールはページの JavaScript を実行しないため、クラスは存在せず、それを使用してテーブルの行を検索することはできません。

    ブラウザの DOM インスペクタ ツールの代わりに「ソースの表示」を使用すると、JavaScript が適用されていない生のソース コードが表示されます。

于 2013-06-24T06:54:18.307 に答える