2012-08-03 5 views

答えて

26

私は "のpythonの構文解析HTML" を検索し、これが最初の結果だった:このコードは、ここでのpythonのドキュメント

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>') 

から取られ https://docs.python.org/2/library/htmlparser.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 

これを使って、HTMLParserのコードを見て、私はこれを思いつきました:

今、あなたは簡単にこれらのリストからデータを抽出することができるはず

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 

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 = [] 

あなたはこのようにそれを使用することができます。私はこれが助けて欲しい!

+0

これは美しいです:) – AsheKetchum

18

Python 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タグが付いていることを知っていますが、私はそれが美しいのは、Python 2.xでのみ動作することに注意するべきだと思います。 – LJNielsenDk

+3

美しいスープ4は、2.7と3の両方で動作します。 –

+0

美味しいスープのAPIドキュメントはどこにありますか? –

0

あなたはまたhtml5libとXPath、there is a good question about it hereを使用して試すことができますが、その答えは期待どおりに動作html5lib作るために覚えておくべき重要な詳細(namespaceHTMLElements)を持っています。私はそれを変える必要があることを見落としてしまったので、時間を無駄にしてしまいました。

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 
関連する問題