2013-07-22 4 views
6

मैं Nokogiri उपयोग कर रहा हूँ, <h1> और <title> टैग खींचने के लिए लेकिन मैं मुसीबत हो रही हो रहा है इन:मैं नोकोगिरी के साथ एक यूआरएल के मेटा टैग को कैसे पार्स और स्क्रैप कर सकता हूं?

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 

मैं डॉक्स में देखा और 'नहीं था:

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

मैं इस कोड है कुछ भी नहीं मिला। क्या मैं ऐसा करने के लिए रेगेक्स का उपयोग करूंगा?

धन्यवाद।

+0

पूर्ण एचटीएमएल दे .. अपनी जरूरत स्पष्ट नहीं है .. –

+0

बस स्पष्ट करने के लिए: 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"] 
1

एक अन्य समाधान: आप XPath या सीएसएस का उपयोग कर सकते हैं।

puts page.xpath('/html/head/meta[@name="description"]/@content').to_s 
puts page.xpath('/html/head/meta[@name="keywords"]/@content').to_s 
संबंधित मुद्दे

 संबंधित मुद्दे