2章高度なHTMLパース

ミケランジェロが、ダビデ像のような傑作をどのようにして彫刻することができたのかと訊かれたとき、「たやすいことです。石からダビデの姿とは見えないところを削り出してしまえばいいのです」と答えたというのは有名です。

Webスクレイピングは、ほとんどの点で大理石の彫刻とは違いますが、複雑なWebページから目的の情報を抽出するという点では同様のアプローチを取らなければなりません。目的の情報にたどり着く前に、目的に沿わないものを取り除くために多くの技法があります。本章では、目的の情報だけを抽出するために、複雑なHTMLページのパースから見ていきましょう。

2.1 いつもハンマーが必要なわけではない

ゴルディアスの結び目†1のように複雑なタグを目にすると、すぐさま仕事に取り掛かり、情報を抽出する何行ものコードを書きたくなるものです。しかし、本節で使われる技法をひたすら積み重ねただけでは、デバッグが難しいか、安定しないか、あるいはその両方とものコードになりかねません。始める前に、高度なHTMLパースそのものが必要でなくなる方法がないかどうか見ておきましょう。

[†1] 訳注:アレキサンダー大王が解いたという有名な縄の結び目。詳しくはWikipediaの項目「ゴルディアスの結び目」を参照。

目的のコンテンツがあるとします。例えば、名前、統計、テキストブロックなどです。HTMLに役立つタグもなければ、HTML属性も見つからず、20個のタグがレイヤーの奥深く埋もれているとしましょう。無謀にも、抽出するために、とりあえず、次のようなコードを書いたとします。

bs.find_all('table')[4].find_all('tr')[2].find('td').find_all('div')[1].find('a') ...

Get PythonによるWebスクレイピング 第2版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.