1

Nokogiri を試してみることにしました。次のプログラムをhttp://nokogiri.rubyforge.org/nokogiri/Nokogiri.htmlrequire 'rubygems'から直接コピーしました (と定数のみを追加I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2)。

require 'rubygems'
I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 = 1
require 'nokogiri'
require 'open-uri'

# Get a Nokogiri::HTML:Document for the page we’re interested in...

doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

# Do funky things with it using Nokogiri::XML::Node methods...

####
# Search for nodes by css
doc.css('h3.r a.l').each do |link|
  puts link.content
end

結果は返されませんでした。しかし、私が変わったとき

    doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

    doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove').read)

プログラムは期待どおりに機能しました。唯一の違いは、行末に .read が追加されていることに注意してください。サンプルコードのほぼすべてのビットが .read. 皮肉なことに、ノコギリの開発者の 1 人による投稿 ( http://tenderlovemaking.com/2008/11/18/underpant-free-excitementで) が含まれていました。API の何かが変更されましたか? 私は何が欠けていますか?

Nokogiri 1.3.2 を使用しています。

ありがとうございました。

4

4 に答える 4

0

問題が何であるかはわかりませんが、への呼び出しはnotopenからのものです。そこで、ノコギリを場から外して実験してみましょう。open-urinokogiri

$ irb
>> require 'open-uri'
=> true
>> f = open('http://www.google.com/search?q=tenderlove')
=> #<File:/var/folders/LA/LACsuKOVHtaEgmBzsJcGAE+++TI/-Tmp-/open-uri.7455.0>
>> f.read
=> "<!doctype html><head><title>tenderlove - Google Search</title>...
于 2009-07-16T02:53:28.747 に答える
0

Nokogiri 1.3.3 にアップグレードし、libxml2 を 2.7.3 にアップグレードしました。エラー メッセージを回避するためにばかげたステートメントを使用する必要がなくなりI_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 = 1、プログラムは不要な .read なしで動作します。

于 2009-08-24T01:04:20.280 に答える
0

(元の) コードをコピーして Ruby ファイルに貼り付け、システム (ruby 1.8.6p369、Nokogiri 1.3.2) で実行したところ、問題なく動作しました。問題を引き起こしている可能性のある何かがあなたの環境にあるのではないでしょうか? ノコギリはさておき、open('http://www.google.com/search?q=tenderlove')あなたに返ってくるものは何ですか?

于 2009-07-15T23:15:32.307 に答える
0

Nokogiri と libxml のバージョンをチェックして、それらが最新であることを常に確認してください。

今日 (2009 年 9 月 22 日) の時点で、これは MacOS で最新です。

nokogiri -v
--- 
nokogiri: 1.3.3
warnings: [ ]

libxml: 
  compiled: 2.7.4
  loaded: 2.7.4
  binding: extension

(空の警告配列の中にスペースを入れて、箱のように見えないようにしています。)

于 2009-09-22T14:05:08.583 に答える