[Python] ウェブサイトから必要なデータだけ取得する「スクレイピング」を BeautifulSoup でやる方法

Python でウェブページから必要なデータだけ取得する方法をご紹介します。

Python

この ”ウェブサイトから必要なデータだけ取得する” ことを「スクレイピング」と呼びます。

「スクレイピング」 = ウェブサイトのデータを必要な部分だけ抽出して利用すること

を頭に入れておけば、あとは「Python スクレイピング」で検索すればたくさん参考になる記事が出てきます。

早速、下記のサイトを参考にしてやってみました。

BeautifulSoup という Python のライブラリを使えば簡単にできるみたいですね。すごい。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import urllib2
from BeautifulSoup import BeautifulSoup
 
url = "http://www.yahoo.co.jp"
htmlfp = urllib2.urlopen(url)
html = htmlfp.read().decode("utf-8", "replace")
htmlfp.close()
 
soup = BeautifulSoup(html)
for link in soup.findAll("a"):
	print link

このプログラムでは、Yahoo! JAPAN (http://www.yahoo.co.jp/) から
<a href="http://www.hogehoge.com/">〜〜〜</a> などのリンクだけを取得して print しています。

実行結果は以下の通りです。(一部抜粋)

<a href="r/mht"><nobr>ヘルプ</nobr></a>
<a href="s/92091">天気、交通情報ほか、連休お役立ち情報</a>
<a href="s/92192">「あいのり2」バングラデシュ編ついに完結</a>
<a href="s/92366">東日本大震災 チャリティーオークション</a>
<a href="r/c1">ショッピング</a>
<a href="r/c2">オークション</a>
<a href="r/c5">旅行、出張</a>
<a href="r/c12">ニュース</a>
<a href="r/c13">天気</a>
<a href="r/c14">スポーツ</a>
<a href="r/c15">ファイナンス</a>
<a href="r/c25">テレビ</a>
<a href="r/c33">地図</a>
<a href="r/c34">路線</a>
<a href="r/c41">グルメ</a>
.
. (途中省略)
.
<a href="r/fin">会社概要</a>
<a href="r/fiv">投資家情報</a>
<a href="r/fcsr">社会的責任</a>
<a href="r/fcgi">企業行動憲章</a>
<a href="r/fad">広告掲載について</a>
<a href="r/fhr">採用情報</a>
<a href="r/ftm">利用規約</a>
<a href="r/fsec">セキュリティーの考え方</a>
<a href="r/fpv">プライバシーポリシー</a>
<a href="r/fdi">免責事項</a>

以上です。