weschool - كلمات html




ما هي أفضل طريقة لتحليل صفحة ويب في روبي؟ (4)

أنا دائما أحب حقا ما يكتب إيليا غريغوريك، وكتب حتى وظيفة لطيفة حول استخدام هبريكوت.

أنا أيضا قراءة هذا المنصب في حين يعود ويبدو أنه سيكون من المفيد بالنسبة لك.

لم تفعل أي نفسي، لذلك يمف ولكن هذه تبدو مفيدة جدا.

لقد كنت تبحث في مكتبات شمل و هتمل على روبيفورج لطريقة بسيطة لسحب البيانات من صفحة ويب. على سبيل المثال، إذا أردت تحليل صفحة مستخدم على ستاكوفيرفلو كيف يمكنني الحصول على البيانات إلى تنسيق قابل للاستخدام؟

لنفترض أنني أرغب في تحليل صفحة المستخدم الخاصة بي للحصول على درجة سمعتي الحالية وإدراج شارة. حاولت تحويل المصدر استرجاعها من صفحة المستخدم الخاصة بي إلى شمل ولكن فشل التحويل بسبب ديف مفقودة. وأنا أعلم أنني يمكن أن تفعل سلسلة مقارنة والعثور على النص الذي أبحث عنه، ولكن يجب أن يكون هناك طريقة أفضل بكثير للقيام بذلك.

أريد تضمين هذا في نص بسيط الذي يبصق بيانات المستخدم الخاص بي في سطر الأوامر، وربما توسيعه إلى تطبيق واجهة المستخدم الرسومية.


هناك شيء واجهته في محاولة للقيام بذلك من قبل هو أن عدد قليل من صفحات الويب هي وثائق شمل بشكل جيد. هبريكوت قد تكون قادرة على التعامل مع ذلك (أنا لم تستخدم ذلك) ولكن عندما كنت أفعل مشروع مماثل في الماضي (باستخدام بيثون ومكتبة بنيت في تحليل وظائف) أنها ساعدت على أن يكون المعالج قبل لتنظيف HTML. اعتدت ربط بيثون ل هتمل مرتب مثل هذا وجعل الحياة أسهل كثيرا. روبي ربط هنا ولكن لم أحاول لهم.

حظا طيبا وفقك الله!


للأسف ستاكوفيرفلو يدعي أنه شمل ولكن في الواقع ليس كذلك. هبريكوت ومع ذلك يمكن تحليل هذه الحساء العلامة في شجرة من العناصر بالنسبة لك.

require 'hpricot'
require 'open-uri'

doc = Hpricot(open("http://.com/users/19990/armin-ronacher"))
reputation = (doc / "td.summaryinfo div.summarycount").text.gsub(/[^\d]+/, "").to_i

وهكذا دواليك.


ويبدو أن الموضوع القديم ولكن هنا هو واحد جديد. مثال على الحصول على سمعة:

#!/usr/bin/env ruby

require 'rubygems'
require 'hpricot'
require 'open-uri'

user = "619673/100kg"
html = "http://.com/users/%s?tab=reputation"

page = html % user
puts page

doc = Hpricot(open(page))
pars = Array.new
doc.search("div[@class='subheader user-full-tab-header']/h1/span[@class='count']").text.each do |p|
  pars << p
end

puts "reputation " + pars[0]




screen-scraping