STERFIELD

Beautiful Soupを使ってスクレイピングを遊ぶ

Beautiful Soupを使ってスクレイピングを遊ぶ

Beautiful Soupとは?

Beautiful SoupとはPythonのライブラリです。
「スクレイピング」に特化した機能を持っています。

「スクレイピング」って?

取得したHTMLから任意の情報を「抽出」する行為や技術を指します。

「クロール」との違いは?

クロールは任意のサイトからHTMLや任意の情報を取得する行為や技術を指します。
ただ取得するのではなく抽出までを含めたものが「スクレイピング」と言えるかと思います。

何故Beautiful Soupなのか?

例えばVBAなど多言語では正規表現でしかスクレイピングに相当する事が再現出来ません。
かなり複雑な条件になる上に、抽出した対象を全文検索します。
Beautiful Soupであれば書き方は至って単純。
抽出した時点で対象をオブジェクトに渡して絞り込みをしていくので処理も軽い。

pythonがインストールされている環境では以下のように構築出来ます。

これだけです。
今や標準でpythonと一緒にあるeasy_installを使用して
pipと言う「pythonの中のサブ機能管理ツール」みっちょなものをインストール。
その後でBeautifulSoupをインストール。終了です。

実際にどんなことが出来るの?

今回はサンプルとしてYahoo!ニュースのトップ記事の一番上にあるテキストを取得してみました。Yahoo! ニュースを見てみましょう。
ターゲットは「主要」の下にあるリストの一番上のテキストです。

次にHTMLソースの位置を把握します。
おおまかに書くとこんな感じのソースとなっています。

文章にしてみれば
「”main”の中の”editorsPick”の中の”ul”リスト中の最初の”li”文字列」
です。日本語とは程遠いですが。。。

答えを先に書いてしまうと以下の様なスクリプトです。

大まかな流れは
1. htmlを取得してBeautifulSoup的な何か(object)を渡す
2. divタグのidがmainと一致するものを取得
3. その中から更にulの中身を取得
4. 最初のリストアイテム(li)を取得
5. 文字列の中にspanタグとかがあるかもしれないのでcontentsを取得してループ
6. out_str(出力用の文字列バッファ)に結合していく
7. 出力

となります。

その他の活用方法など

筆者もBeautiful Soup自体にはそれほど馴染んでいないため、実例はあまり思い浮かばないのが正直なところです。例えば「キーワード検索結果のTOP10からタイトル、サイトを取得して、その遷移をグラフ化する」であったり
「.zipなどの書庫一覧のリンクを辿ってリスト化する」など様々ですが、基本的には自動化用途が多い気がします。

Chromeのプラグインと併せてサイト内検索やデータマイニングなども今後は拡張する可能性があるのではないでしょうか。

Author Profile

著者近影

スターフィールド編集部

SHARE

合わせて読みたい