質問: TestParser() # パーサオブジェクトの生成 parser.feed(response.read().decode("utf-8")) # パーサにHTMLを入力する parser.close() response.close() ```
回答: 回答1 Python 標準の html.parser は HTMLParser クラスを継承して自作のパーサを作成して利用します。なぜこのようになっているかといえば HTMLParser を設計した人がそのような使い方をするように作ったからそのような使い方をします。 回答2 Beautiful Soup のような使い方をしたいならば Beautiful Soup を使いましょう。 なお Beautiful Soup は使用するパーサを選択でき、その一つに html.parser があります。 つまり、Beautiful Soup は html.parser を使って作られており、より使いやすくしたものであるともいえます。 標準の html.parser を直接使う方法と、 Beautiful Soap を使う方法とそれぞれにメリットとデメリットがあります。自分のやりたいことを踏まえて適切なライブラリを選択しましょう。 回答3 クラスの中に書いてあるのは関数ではなくメソッドです。メソッドの定義は上から順に実行されます。しかし、上から順にメソッドが呼び出されるわけではありません。 handle_starttag() メソッドが呼び出されるのは handle_starttag() を呼び出しときとなります。 上記コードでは handle_starttag() を明示的に呼び出しているコードはありませんが、 parser.feed(response.read().decode("utf-8")) で feed() というメソッドを呼び出しており、この feed() メソッドやそこから呼び出されている別のメソッドの中でHTMLを処理しながら開始タグが見つかった際に handle_starttag() を呼び出します。 クラスの定義や利用方法がわからないということであれば一度 Python の入門書などを読んだ方がよいと思います。 回答4 feed() メソッドの内部から呼び出される別のメソッドから handle_starttag() を呼び出す際に渡されます。 以下からソースコードが見れますので確認してください。 * 回答5 回答4と同様、feed() メソッドの内部から呼び出される別のメソッドから handle_data() を呼び出す際に渡されます。