2012-08-03 24 views
13

मैं एक स्ट्रिंग में दो तत्वों के अंदर का पाठ प्राप्त करने की आवश्यकता के अंदर का पाठ पाने के लिए:पार्सिंग HTML एक तत्व

source_code = """<span class="UserName"><a href="#">Martin Elias</a></span>""" 

>>> text 
'Martin Elias' 

मैं यह कैसे प्राप्त कर सकता है?

+0

थेरेस कई यहाँ बिल्ली त्वचा के लिए तरीके। अंतिम परिणाम क्या है? आप जावास्क्रिप्ट या कुछ सर्वर-साइड पार्सिंग कर सकते हैं। –

उत्तर

26

मैं "अजगर पार्स html" खोज की है और यह पहला परिणाम था:

Encountered a start tag: html 
Encountered a start tag: head 
Encountered a start tag: title 
Encountered some data : Test 
Encountered an end tag : title 
Encountered an end tag : head 
Encountered a start tag: body 
Encountered a start tag: h1 
Encountered some data : Parse me! 
Encountered an end tag : h1 
Encountered an end tag : body 
Encountered an end tag : html 
: https://docs.python.org/2/library/htmlparser.html

इस कोड को अजगर डॉक्स

from HTMLParser import HTMLParser 

    # create a subclass and override the handler methods 
    class MyHTMLParser(HTMLParser): 
     def handle_starttag(self, tag, attrs): 
      print "Encountered a start tag:", tag 
     def handle_endtag(self, tag): 
      print "Encountered an end tag :", tag 
     def handle_data(self, data): 
      print "Encountered some data :", data 

    # instantiate the parser and fed it some HTML 
    parser = MyHTMLParser() 
    parser.feed('<html><head><title>Test</title></head>' 
       '<body><h1>Parse me!</h1></body></html>') 

यहाँ से लिया जाता है परिणाम है

इसका उपयोग करके और HTMLParser में कोड को देखकर मैं इस के साथ आया:

class myhtmlparser(HTMLParser): 
    def __init__(self): 
     self.reset() 
     self.NEWTAGS = [] 
     self.NEWATTRS = [] 
     self.HTMLDATA = [] 
    def handle_starttag(self, tag, attrs): 
     self.NEWTAGS.append(tag) 
     self.NEWATTRS.append(attrs) 
    def handle_data(self, data): 
     self.HTMLDATA.append(data) 
    def clean(self): 
     self.NEWTAGS = [] 
     self.NEWATTRS = [] 
     self.HTMLDATA = [] 

आप इस तरह इसका इस्तेमाल कर सकते हैं:

from HTMLParser import HTMLParser 

pstring = source_code = """<span class="UserName"><a href="#">Martin Elias</a></span>""" 


class myhtmlparser(HTMLParser): 
    def __init__(self): 
     self.reset() 
     self.NEWTAGS = [] 
     self.NEWATTRS = [] 
     self.HTMLDATA = [] 
    def handle_starttag(self, tag, attrs): 
     self.NEWTAGS.append(tag) 
     self.NEWATTRS.append(attrs) 
    def handle_data(self, data): 
     self.HTMLDATA.append(data) 
    def clean(self): 
     self.NEWTAGS = [] 
     self.NEWATTRS = [] 
     self.HTMLDATA = [] 

parser = myhtmlparser() 
parser.feed(pstring) 

# Extract data from parser 
tags = parser.NEWTAGS 
attrs = parser.NEWATTRS 
data = parser.HTMLDATA 

# Clean the parser 
parser.clean() 

# Print out our data 
print tags 
print attrs 
print data 

अब आप आसानी से उन सूचियों से अपने डेटा को निकालने के लिए सक्षम होना चाहिए। मुझे आशा है कि इससे मदद मिलेगी!

+0

यह सुंदर है :) – AsheKetchum

18

मैं पाइथन Beautiful Soup 4 लाइब्रेरी का उपयोग करने की सलाह देता हूं।

pip install beautifulsoup4 

यह HTML पार्सिंग को वास्तव में आसान बनाता है।

from bs4 import BeautifulSoup 
source_code = """<span class="UserName"><a href="#">Martin Elias</a></span>""" 
soup = BeautifulSoup(source_code) 
print soup.a.string 
>>> 'Martin Elias' 
+0

मुझे पता है कि सवाल python-2.x टैग किया गया है, लेकिन मुझे लगता है कि यह ध्यान दिया जाना चाहिए कि सुंदरसप केवल अजगर 2.x पर काम करता है। – LJNielsenDk

+3

सुंदर सूप 4 2.7 और 3. दोनों में काम करता है –

+0

सुंदर सूप के लिए आपको अच्छा एपीआई दस्तावेज कहां मिलते हैं? –

0

तुम भी html5lib और XPath, there is a good question about it here उपयोग करने का प्रयास कर सकते हैं, कि इस सवाल का जवाब एक महत्वपूर्ण विस्तार (namespaceHTMLElements) अपेक्षा के अनुरूप व्यवहार html5lib बनाने के लिए याद करने के लिए है। मैंने इसे काम करने की कोशिश करने में इतना समय बर्बाद कर दिया क्योंकि मैंने अनदेखा किया कि मुझे इसे बदलने की जरूरत है।

2

BeautifulSoup स्थापित करें और आप इस तरह कर सकते हैं:

from BeautifulSoup import BeautifulSoup 
source_code = '"""<span class="UserName"><a href="#">Martin Elias</a></span>"""' 
soup = BeautifulSoup(source_code) 
print soup.find('span',{'class':'UserName'}).text 
संबंधित मुद्दे