2008-09-19 14 views
14

मैं ग्रोवी में एक वेब पेज का विश्लेषण करना चाहता हूं और इसके साथ सभी href लिंक और संबंधित पाठ निकालना चाहता हूं।आप एक वेब पेज का विश्लेषण कैसे करते हैं और सभी href लिंक निकालें?

<a href="http://www.google.com">Google</a><br /> 
<a href="http://www.apple.com">Apple</a> 

उत्पादन होगा::

Google, http://www.google.com<br /> 
Apple, http://www.apple.com 

मैं एक ग्रूवी जवाब के लिए देख रहा हूँ

तो पेज इन कड़ियों निहित। उर्फ। आसान तरीका!

उत्तर

17

द्वारा एक अच्छा कदम है, एक्सएमएल slurp, सभी टैग अप इकट्ठा है, 'एक' टैग मिल जाए, और href और पाठ प्रिंट आउट।

input = """<html><body> 
<a href = "http://www.hjsoft.com/">John</a> 
<a href = "http://www.google.com/">Google</a> 
<a href = "http://www.stackoverflow.com/">StackOverflow</a> 
</body></html>""" 

doc = new XmlSlurper().parseText(input) 
doc.depthFirst().collect { it }.findAll { it.name() == "a" }.each { 
    println "${it.text()}, ${[email protected]()}" 
} 
+1

यह दृष्टिकोण एक साधारण लेकिन सही कारण के लिए बहुत अच्छा काम नहीं करेगा - आमतौर पर वेबसाइट में अच्छी तरह से बनाए गए एक्सएमएल नहीं होते हैं। यह कुछ मामलों में काम करेगा लेकिन सभी नहीं। – MeIr

+1

यहां एक अच्छा लिंक है: http://blog.stannard.net.au/2010/05/12/parsing-html-with-groovy-and-htmlcleaner/ – MeIr

4

एक त्वरित Google खोज ने एक अच्छी लग रही संभावना, TagSoup चालू कर दिया।

+0

यह साइट टैग्सपॉप के साथ एक पूर्ण उदाहरण प्रदान करती है जो काम करता है। http://www.cyblex.at/blog/?p=83 मुझे इसे चलाने के लिए कुछ उद्धरण चिह्न ('और ") को बदलना पड़ा लेकिन यह उदाहरण उत्कृष्ट है। लेखक सभी को डाउनलोड करता है * .mp4 फाइलें –

0

नियमित अभिव्यक्ति का प्रयास करें। कुछ इस तरह काम करना चाहिए:

(html =~ /<a.*href='(.*?)'.*>(.*?)<\/a>/).each { url, text -> 
    // do something with url and text 
} 

Groovy - Tutorial 4 - Regular expressions basics और Anchor Tag Regular Expression Breaking पर एक नजर डालें।

+4

नियमित अभिव्यक्तियां कैंसर का इलाज भी करती हैं। – wfarr

+0

... संभावित राक्षसी कब्जे की लागत पर http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way।एचटीएमएल – harschware

1

XML दस्तावेज़ को XML दस्तावेज़ के रूप में पार्स करने के लिए XMLSlurper का उपयोग करें और फिर टैग का चयन करने के लिए उचित बंद के साथ ढूंढ विधि का उपयोग करें और फिर टैग की सूची प्राप्त करने के लिए GPathResult पर सूची विधि का उपयोग करें। इसके बाद आपको GPathResult के बच्चों के रूप में टेक्स्ट निकालने में सक्षम होना चाहिए।

2

मुझे जावा नहीं पता है, लेकिन मुझे लगता है कि xpath क्लासिक नियमित अभिव्यक्तियों से कहीं अधिक बेहतर है (या अधिक) HTML तत्व प्राप्त करने के लिए।

लिखना और पढ़ना भी आसान है।

<html> 
    <body> 
     <a href="1.html">1</a> 
     <a href="2.html">2</a> 
     <a href="3.html">3</a> 
    </body> 
</html> 

उपरोक्त एचटीएमएल के साथ, यह अभिव्यक्ति "/ html/body/a" सभी href तत्वों को सूचीबद्ध करेगी।

यहाँ मान लिया जाये कि सुनिर्मित XHTML कदम ट्यूटोरियल http://www.zvon.org/xxl/XPathTutorial/General/examples.html

-2

Html पार्सर + रेगुलर एक्सप्रेशन कोई भी भाषा यह करना होगा, हालांकि मैं कहेंगे पर्ल सबसे तेजी से समाधान है।

0

XMlSlurper का उपयोग कर पार्सिंग केवल एचटीएमएल अच्छी तरह से बनाई गई है तो काम करता है।

यदि आपके एचटीएमएल पृष्ठ में गैर-सुव्यवस्थित टैग हैं, तो पृष्ठ को पार्स करने के लिए रेगेक्स का उपयोग करें।

पूर्व: <a href="www.google.com">

यहाँ

, 'एक' नहीं बंद कर दिया है और इस तरह अच्छी तरह से नहीं बना है।

new URL(url).eachLine{ 
    (it =~ /.*<A HREF="(.*?)">/).each{ 
     // process hrefs 
    } 
} 
संबंधित मुद्दे