sgmllibを使ってみた
sgmllibとは、SGML形式のテキストファイルを解析するモジュールって事なんだけどSGML形式ってなんぞ?SGML形式とは、簡単に解釈すればHTML形式やXML形式の親って事で良いよね。で、親だからHTMLやXMLを解釈できるって事。
sgmllibを使ってみた。
from sgmllib import SGMLParser class HtmlLister(SGMLParser): def reset(self): SGMLParser.reset(self) self.urlList = [] def start_a(self, attrs): href = [v for k, v in attrs if k == 'href'] if href: self.urlList.extend(href) def getHtml(url): import urllib sock = urllib.urlopen(url) html = sock.read() sock.close() return html if __name__ == "__main__": html = getHtml("お好みのアドレス") parser = HtmlLister() parser.feed(html) parser.close() text = parser.urlList text.sort() link = [t for t in text if t.find("http", 0, 4) >= 0] print("\n".join(link))
これも、Dive Into Pythonにあるコードをちょっと改造しただけなんだがね。「SGMLParser」を直接使うんじゃなくって継承して、そのクラス内で必要なメソッドをオーバーライトしている。「reset()」で初期化、なんでも「__init__」は、ここでは使わないみたい。その他、沢山メソッドがあったが、あとはPythonのオンラインマニュアル参照(http://www.python.jp/doc/release/lib/module-sgmllib.html)
やっている事は、HTMLテキストを取得して、そのHTMLテキストの中に存在するAタグのhref属性の値を取得している。ちなみに画面に表示するのは先頭4文字がhttpで始まるものにしている。
あと
text = parser.urlList text.sort()
の部分だけど、「parser.urlList」はリスト形式なので、そのままソートしたかった。「parser.urlList.sort()」とかってやるとエラーになる。「(parser.urlList).sort()」や「[parser.urlList].sort()」とやってもエラーになった。ので他の変数に格納してソートしている。もう少し良いやり方がありそうなんだが、良くわかんないや。このやり方がベストなのかな?
Pythonって作りたいものがすぐに作れる。利用しやすいモジュールがそろっているのが魅力ですね。素晴らしいと思う。うん