2009-10-23 41 views
5

Như tiêu đề đã nói, tôi có một số thao tác thao tác DOM. Ví dụ: tôi muốn: - tìm tất cả phần tử H1 có màu xanh dương. - tìm tất cả văn bản có kích thước 12px. - vv ..Cách thao tác DOM với Ruby on Rails

Làm thế nào tôi có thể làm điều đó với Rails?

Cảm ơn bạn .. :)

Cập nhật

tôi đã và đang làm một số nghiên cứu về giải nén nội dung trang web dựa trên này paper->http://www.springerlink.com/index/A65708XMUR9KN9EA.pdf

Bản tóm tắt của các bước là:

  1. nhận url web mà tôi muốn trích xuất (trang web đơn)
  2. lấy một số yếu tố từ trang web dựa trên một số nguyên tắc thị giác (Ví dụ: lấy tất cả H1 có màu xanh)
  3. quá trình các yếu tố với thuật toán của tôi
  4. lưu kết quả vào cơ sở dữ liệu của tôi.

-sorry cho Anh xấu của tôi

+0

Ông có thể mở rộng vào những gì bạn đang cố gắng để đạt được (những gì bạn đang làm) để tôi có thể đưa ra lời khuyên cụ thể hơn cho vấn đề của bạn? Cảm ơn. –

+0

Dựa trên cập nhật của bạn, tôi khuyên bạn nên thay đổi câu hỏi của bạn thành một cái gì đó như: "Cách phân tích cú pháp tài liệu HTML dựa trên tiêu chí trực quan với Ruby" –

Trả lời

1

Để chắc chắn loại ra những gì màu sắc một yếu tố tùy ý trên một trang web là, bạn sẽ cần phải thiết kế đối chiếu một trình duyệt (để có một cách chính xác vào stylesheets tài khoản, hack đánh dấu, thẻ bị hỏng, hình ảnh, v.v.)

Cách tiếp cận dễ dàng hơn nhiều là nhúng trình duyệt hiện có như gecko vào ứng dụng tùy chỉnh của bạn.

Khi con nhện của bạn duyệt qua các trang, nó sẽ chuyển chúng tới thể hiện được nhúng của bạn của con tắc kè nơi bạn có thể sử dụng getComputedStyle để kéo màu nào mà một phần tử riêng lẻ xảy ra.

Ban đầu, bạn đã đề cập muốn sử dụng Ruby on Rails cho dự án này, Rails là một khuôn khổ cho việc viết các ứng dụng presentational và thực sự phù hợp xấu cho một dự án như thế này.

Là điểm khởi đầu, tôi khuyên bạn nên xem RubyGnome và đặc biệt là chức năng Gtk::MozEmbed của RubyGnome.

+0

Cảm ơn, Mike. Có hoạt động với thuộc tính css không? Ví dụ: Tôi muốn chọn chỉ H1 có màu xanh dương. – andrisetiawan

+0

Đây không phải là những gì OP muốn. Anh ta muốn làm tất cả việc xử lý ở phía máy chủ, chứ không phải trong JavaScript. –

+0

Tôi đã đăng câu trả lời của mình trước khi cập nhật (khi nó xuất hiện mà anh ta muốn một giải pháp phía khách hàng). –

8

Nếu bạn đang cố gắng làm là thao tác các tài liệu HTML bên trong một ứng dụng đường ray, bạn nên có một cái nhìn tại Nokogiri.

Nó sử dụng XPath để tìm kiếm thông qua các tài liệu. Với những điều sau đây, bạn sẽ tìm thấy bất kỳ h1 nào với lớp css "xanh" bên trong một tài liệu.

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open('http://www.stackoverflow.com')) 
doc.xpath('//h1/a[@class="blue"]').each do |link| 
    puts link.content 
end 

Sau đó, nếu những gì bạn đang cố gắng thực sự phân tích cú pháp trang hiện tại, bạn nên xem JavaScript và JQuery. Rails không thể làm điều đó.

+0

Đây là cách tiếp cận ban đầu của tôi, nhưng nếu bạn đọc qua bản tóm tắt giấy, anh ấy không yêu cầu một lớp css "xanh dương", nhưng thực sự có màu xanh lam trên nhiều trang web với các lược đồ đánh dấu và CSS khác nhau. –