しばらくほったらかしであったpythonを少しは使えるようにしたいと思い、「はじめてのPython3」をまじめに勉強しようと思い立った。章末問題をこつこつ解き、第5章まではひと通りやった。だいぶ復習になった。第6章のクラスに関する問題は1番までやった。勉強になった。ソースを読むということがいかに大切かわかった。
第9章に、特定のホームページの画像ファイルをダウンロードするというサンプルがある。これを参考に、リンクのURLを渡り歩くプログラムを作ろうと考えた。この本ではurllibとreを使って、リンクや画像ファイル名を正規表現で切り出す。しかしなかなかリンクを取り出す正規表現は難しく、結局HTMLParserを使うこととした。ここに行きつくまでにも紆余曲折があった。Beautiful Soupがよいとかrequestsがよいという記事を何回も目にし、インストールも何回か試みたがうまくいかなかった。おかげでHTMLParserを調べざるを得なくなったのだが、これは良い勉強であった。
HTMLParserはその名の通りhtmlファイルを読んで、タグを解析して、返すのだが、その返し方が秀逸である。ほう、こういうふうにやるのか、と感心しきりである。
その方法とはこうである。まず、HTMLParserのサブクラスをつくる。サブクラスからHTMLParser.feed(data)でHTMLファイルを流し込んでやると、HTMLParserは、解析してタグに出会うとHTMLParserのメソッドhandle_starttag(tag,attrs)を呼び出すのである。この時、であったタグと付随する情報がtagとattrsで渡されるのである。しかし、HTMLParserのメソッドhandle_starttagはとくにどうという行動はしない。で、作ったサブクラスにおなじ handle_starttagというメソッドを定義する。すると、これが呼ばれる。なので、やりたいことは、ここで定義するのだ。
HTMLParserのソースを眺めてみると、正規表現が数多く使われている。こりゃ自分じゃ作れないわけだと思った。
Pyscripterの使い方もだいぶ学習した。前々から素晴らしいと思っていたが本当に素晴らしいことが分かった。
なお、使っているのはPython Portable でPythonのバージョンは3.2.1.1である。Python自体では3.3が出ていて、結構な変更があり、日本語のドキュメントもしっかりしているので3.3に移行したいが、Portableではまだ3.3になっていないのが残念だ。
0 件のコメント:
コメントを投稿