2013-07-22 55 views
6

我使用引入nokogiri拉<h1><title>標籤, 但我無法得到這些:如何解析和刮取與Nokogiri URL的元標記?

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

我有這樣的代碼:

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 

我看着在文檔和沒」找不到任何東西。我會使用正則表達式來做到這一點?

謝謝。

+0

給出完整的html ..您的需求尚不清楚 –

+0

只是爲了澄清:Nokogiri不會抓取任何東西。它只是解析。您的代碼與OpenURI和Nokogiri等寶石一起進行爬網。 –

回答

7

這是我怎麼會去一下吧:

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"] 

或者:

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

這將是:

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

另一種解決方案:可以使用XPath或CSS。

puts page.xpath('/html/head/meta[@name="description"]/@content').to_s 
puts page.xpath('/html/head/meta[@name="keywords"]/@content').to_s