2013-07-22 25 views
6

Tôi đang sử dụng Nokogiri để kéo <h1><title> thẻ, nhưng tôi gặp khó khăn sau đây:Làm cách nào để phân tích cú pháp và xóa các thẻ meta của URL bằng Nokogiri?

<meta name="description" content="I design and develop websites and applications."> 
<meta name="keywords" content="web designer,web developer"> 

tôi có mã này:

url = 'https://en.wikipedia.org/wiki/Emma_Watson' 
page = Nokogiri::HTML(open(url)) 

puts page.css('title')[0].text puts page.css('h1')[0].text 
puts page.css('description') 
puts META DESCRIPTION 
puts META KEYWORDS 

tôi nhìn vào tài liệu và didn' t tìm thấy bất cứ điều gì. Tôi có sử dụng regex để làm điều này không?

Cảm ơn.

+0

cung cấp đầy đủ html .. nhu cầu của bạn chưa rõ ràng .. –

+0

Chỉ cần làm rõ: Nokogiri không thu thập thông tin gì cả. Nó chỉ phân tích cú pháp. Mã của bạn, kết hợp với đá quý như OpenURI và Nokogiri, có bò không. –

Trả lời

7

Đây là cách tôi muốn đi về nó:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<meta name="description" content="I design and develop websites and applications."> 
<meta name="keywords" content="web designer,web developer"> 
EOT 

contents = %w[description keywords].map { |name| 
    doc.at("meta[name='#{name}']")['content'] 
} 
contents # => ["I design and develop websites and applications.", "web designer,web developer"] 

Hoặc:

contents = doc.search("meta[name='description'], meta[name='keywords']").map { |n| 
    n['content'] 
} 
contents # => ["I design and develop websites and applications.", "web designer,web developer"] 
5

Đó sẽ là:

page.at('meta[name="keywords"]')['content'] 
1

Một giải pháp khác: Bạn có thể sử dụng XPath hoặc CSS.

puts page.xpath('/html/head/meta[@name="description"]/@content').to_s 
puts page.xpath('/html/head/meta[@name="keywords"]/@content').to_s 
Các vấn đề liên quan