html - Parsing with Xpath -


निम्नलिखित HTML पर विचार करें:

  & lt; div class = 'data' & gt; & Lt; div class = 'user_name' & gt; लंकेस & lt; / div & gt; & Lt; div class = 'user_details' & gt; & Lt; div वर्ग = 'देश' & gt; श्रीलंका & lt; / div & gt; & Lt; div वर्ग = 'आयु' & gt; 9 & lt; / div & gt; & Lt; / div & gt; & Lt; div class = 'user_name' & gt; बॉब & lt; / div & gt; & Lt; div class = 'user_details' & gt; & Lt; div वर्ग = 'देश' & gt; यूएस & lt; / div & gt; & Lt; div वर्ग = 'आयु' & gt; 54 & lt; / div & gt; & Lt; / div & gt; & Lt; div class = 'user_name' & gt; देइटर & lt; / div & gt; & Lt; div class = 'user_details' & gt; & Lt; div वर्ग = 'देश' & gt; जर्मनी & lt; / div & gt; & Lt; div वर्ग = 'आयु' & gt; 34 & lt; / div & gt; & Lt; / div & gt; & Lt; div class = 'user_name' & gt; याकॉब & lt; / div & gt; & Lt; div class = 'user_details' & gt; & Lt; div वर्ग = 'देश' & gt; सीरिया & lt; / div & gt; & Lt; div वर्ग = 'आयु' & gt; 90 & lt; / div & gt; & Lt; / div & gt; & Lt; div class = 'user_name' & gt; कुरेशी & lt; / div & gt; & Lt; div class = 'user_details' & gt; & Lt; div वर्ग = 'देश' & gt; एहगन & lt; / div & gt; & Lt; div वर्ग = 'आयु' & gt; 56 & lt; / div & gt; & Lt; / div & gt; & Lt; div class = 'user_name' & gt; स्मिथ जॉर्ज & lt; / div & gt; & Lt; div class = 'user_details' & gt; & Lt; div वर्ग = 'देश' & gt; भारत & lt; / div & gt; & Lt; div वर्ग = 'आयु' & gt; 23 & lt; / div & gt; & Lt; / div & gt; & Lt; / div & gt;   

और निम्न रूबी कोड:

  की आवश्यकता 'नोकोगीरी' sample_html = File.open ("r.htm", "r")। N पढ़ें = Nokogiri :: HTML :: parse sample_html xpaths = {} xpaths [: नाम] = "// div [@class = 'user_name'] / पाठ ()" xpaths [: देश] = "// div [@ वर्ग = 'देश'] / पाठ () "xpaths [: age] =" // div [@ class = 'age'] / text () "full_path = xpaths.values.join (" | ") n.xpath (full_path) .each करो | मैं | डेटा समाप्त करने के लिए यह काम करता है, लेकिन मैं कैसे (नाम, उम्र और देश) का हिस्सा कर सकता हूं ताकि मैं पार्स किए गए डेटा को एक संरचना में और आसानी से निकाल सकूं।  
  • चूंकि नाम user_details ब्लॉक के बाहर है, मैं एक क्वेरी लिखने में असमर्थ हूं: // div [@class = 'user_details'] और प्रत्येक विशेषताओं को निकालें।
  • मुझे पता है कि मैं 3 के समूह में सरणी का टुकड़ा कर सकता हूँ; लेकिन मैं xpath आधारित समाधान की तलाश कर रहा हूं, क्योंकि मेरी वास्तविक ज़रूरत में कई बच्चे गुण हैं।
  • बेवकूफ, लेकिन: वैसे भी पार्सिंग के दौरान किसी भी तरह निकाले गए पाठ को वर्णों को इंजेक्ट करने के लिए?

    कोई भी विचार?

    मुझे यह कहकर शुरू कर दो कि यह समायोजित करना बेहतर होगा एचटीएमएल प्रत्येक उपयोगकर्ता ब्लॉकों को अपनी स्वयं की डिवेल में रखता है:

      & lt; div class = 'user' & gt; & Lt; div वर्ग = 'नाम' & gt; जॉन & lt; / div & gt; & Lt; div वर्ग = 'विवरण' & gt; & Lt; div वर्ग = 'देश' & gt; यूएस & lt; / div & gt; ... & lt; / div & gt; & Lt; / div & gt;   

    तब आप बस प्रत्येक उपयोगकर्ता ब्लॉक को "// div [@class = 'user']" का उपयोग करके अलग से क्वेरी कर सकते हैं। आप शायद एचटीएमएल के नियंत्रण में नहीं हैं, हालांकि।

    वर्तमान स्थिति को देखते हुए मैं केवल user_name divs प्राप्त करने का प्रस्ताव देता हूं, साथ ही साथ user_details divs और उन्हें एक साथ ज़िप। इसके बाद, आप बच्चे डिविज़ ( .xpath ("div") ) के आधार पर उपयोगकर्ता विवरण से एक हैश बना सकते हैं जो उपयोगकर्ता की किसी भी राशि के लिए काम करेगा और उनके वर्ग विशेषता को एक हैश कुंजी के रूप में उपयोग करेगा और एक मूल्य के रूप में उनका पाठ ध्यान दें कि यह कार्यान्वयन केवल एकल-स्तरीय user_details पर काम करता है बेशक यह सभी समायोजित करने होंगे, यदि सभी यूजर-बिडेट बच्चे की डिवाज़ में क्लास एट्रिब्यूट नहीं होंगे। लेकिन अपने उदाहरण के इनपुट से वे न्याय करते हैं।

      की आवश्यकता होती है 'पीपी' को 'नोकोगीरी' की आवश्यकता है sample_html = File.open ("r.htm", "r")। N = Nokogiri :: HTML :: parse sample_html user_names = n.xpath ("// div [@class = 'user_name']") user_details = n.xpath ("// div [@class = 'user_details']") उपयोगकर्ता = user_names.zip (User_details) .मैप करो | नाम, विवरण | {Name: name.text, विवरण: हैश [details.xpath ("div")। Map {| d | [डी ['वर्ग']। To_sym, d.text]}]} पीपी उपयोगकर्ता # [[:: नाम = & gt; "लंकेश",: विवरण = & gt; {: देश = & gt; "श्रीलंका" ,: उम्र = "#": "=", "#": "=" = "Gtc: & Gt; "Deiter",: विवरण = & gt; {: देश = & gt; "जर्मनी" ,: आयु = & gt; "34"}}, # {: name = & gt; "Yakob",: विवरण = & gt; {: देश = & gt; "सीरिया" ,: आयु = & gt; "90"}}, # {: नाम = & gt; "कुरेशी" ,: विवरण = & gt; {: देश = & gt; "आफ़गन" ,: आयु = & gt; "भारत",: age = & gt; "23"}}]    

Comments

Popular posts from this blog

ios - Adding an SKSpriteNode to SKScene from a child SKSpriteNode -

Matlab transpose a table vector -

c# - Textbox not clickable but editable -