2011年7月6日水曜日

PythonでHTMLをパースする方法

 

HTMLParserの使い方がぐぐってもあんまりいい方法が出てこなかったのでブログに書きます。

よく使うりんくの抽出ならびにそのばりゅーを取得するクラスです。もっとうまくかけるはずだけどめんどいのであしからず。。。。w 必要な方はカスタマイズなさってください(。◕ ∀ ◕。)

#!/usr/bin/env python
# encoding: utf-8

from HTMLParser import HTMLParser

class My_parser(HTMLParser):#

    def __init__(self):
        HTMLParser.__init__(self)
        self.is_a  =False
        self.href = None
        self.val = None
        self.data = []

    def handle_starttag(self,tagname,attribute):
        if tagname.lower() == "a":
            #aタグの始まり時にself.is_aをTrueに
            self.is_a = True
            for i in attribute:
                if i[0].lower() == "href":
                    self.href =i[1]
                    
    def handle_endtag(self,tag):
        if tag.lower() == "a":
            #おわりにはself.is_aをFalseに
            self.is_a = False
            
            self.data.append({
                "url":self.href,
                "val":self.val
                })
            self.href = None
            self.val = None
                    
    def handle_data(self,data):
        #atagの中にいる時だけばりゅーを代入
        if self.is_a is True:
            self.val = data

def main():
    html ="""
	<h3>test</h3>
	<div>
		<a href="hello.html">hello</a>
    		<a href="world.html">world</a>
    	</div>
    """
    parser = My_parser()
    parser.feed(html)
    print [item for item in parser.data]
    #[{'url': 'hello.html', 'val': 'hello'}, {'url': 'world.html', 'val': 'world'}]

            
                
if __name__ == '__main__':
    main()

 

0 件のコメント:

コメントを投稿