فشل برنامج Nokogiri الأساسي - مشكلة وثائق أو علة؟

StackOverflow https://stackoverflow.com/questions/1134363

  •  16-09-2019
  •  | 
  •  

سؤال

قررت إعطاء Nokogirie تجربة، ونسخ البرنامج التالي مباشرة من http://nokogiri.rubyforge.org/nokogiri/nokogiri.html. (إضافة فقط require '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 في نهاية السطر. لن أحسب أبدا هذا بنفسي، لأنه فقط حول كل رمز مثال يترك قبالة. المكان الذي شمله، من المفارقات كان منشورا من قبل أحد مطوري Nokogiri (في http://tenderlovemaking.com/2008/11/18/UnTerPant-Free-Excitement.). هل حدث شيء في API؟ ماذا ينقصني؟

أنا أستخدم Nokogiri 1.3.2.

شكرا لك.

هل كانت مفيدة؟

المحلول 3

قمت بالترقية إلى Nokogiri 1.3.3، وترقية libxml2 إلى 2.7.3. لم أعد بحاجة إلى استخدام السخرية I_KNOW_I_AM_USING_AN_OLD_AND_BUGGY_VERSION_OF_LIBXML2 = 1 بيان لتجنب رسائل الخطأ، ويعمل البرنامج دون الخروج.

نصائح أخرى

قمت بنسخ ولصق الرمز الخاص بك (الأصلي) في ملف Ruby وارتفع ذلك على نظامي (روبي 1.8.6p369، Nokogiri 1.3.2) عملت بشكل جيد. قد يكون هناك شيء آخر في بيئتك التي يمكن أن تسبب المشكلة؟ نوكوجيري جانبا، ماذا يفعل open('http://www.google.com/search?q=tenderlove') العودة لك؟

لست متأكدا من مشكلتك، ولكن الدعوة إلى open انه من open-uri ليس nokogiri. وبعد لذلك قم ببعض تجارب أخذ Nokogiri خارج اللعب.

$ 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>...

من الجيد دائما التحقق من إصدار Nokogiri و Libxml للتأكد من أنهم الحاليون.

اعتبارا من اليوم (9/22/09) هذا هو الحالي على ماكو:

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

libxml: 
  compiled: 2.7.4
  loaded: 2.7.4
  binding: extension

(أضع مساحة داخل صفيف التحذيرات الفارغة للحفاظ عليها من البحث مثل مربع.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top