投稿日:2011年4月21日 -投稿者 koyamamoto
pythonでスクレイピング
rubyでスクレイピングしている記事が目に入ったので
突発的にpythonでスクレイピングする記事を書きたいと思います。
内容も同じことを目指したいと思います。
セットアップ~ブログ記入完了まで1時間30分しかありませんが始めます。
まずこれを書いているマシンがセットアップしたてのためまっさらな環境です
まずpythonのインストールからはじめました。
http://www.python.org/download/
3.0系が出て時間がたちましたが、
GAEなどをはじめとしていまだに2.0系でないと対応できないものも多く
ここでは2.7.1を利用します。
Winではexeからインストールを行い、
環境変数PATHにインストールしたディレクトリを追加しました。
次にあると便利なeasy_installを入れておきます。
今回ただスクレイピングするだけなら必要ありませんが
せっかくですし便利なので入れておきましょう。
http://peak.telecommunity.com/dist/ez_setup.py
インストールの仕方はほかのサイトなどで詳しく解説されていますのでそちらも参照お願いします。
上のリンクからpythonファイルをダウンロードし、
> python ez_setup.py
と実行してやることでインストール完了です。
Winなので”C:\Python27\Scripts”のようにSriptsディレクトリをPATHに追加してください。
easy_installが入ったのでこれを利用してBeautiful Soupをインストールします。
> easy_install beautifulsoup
これだけで完了です。簡単ですね、素敵ですね。
easy_installを入れた甲斐がありました。
さてここまで出ようやく準備が整いましたので本題に入ります。
まずBeautiful Soupを使うためにimportします。
>>> from BeautifulSoup import BeautifulSoup
urllib2も利用しますのでこちらもインポートします。
>>> import urllib2
さてそれではスクレイピングをはじめます。
まずスクレイピングするURLの指定とBeautifulSoupへの読み込みを行います。
>>> url = “http://www.kdl.co.jp/“
>>> srcHtml = urllib2.urlopen(url).read()
>>> soup = BeautifulSoup(html)
これで下ごしらえは完了です。
変数soupにhtmlソースがいい感じに溶け込みました。
さてこのスープからタグ<a>を抜き出してみます。
もっとも単純に抜き出す方法は
>>> soup(“a”)
とすることです。
画面上にずらずらと<a>~</a>の部分が表示されたと思います。
改行くらい・・・という場合は
>>> for a in soup(“a”):
… print a
のようにpythonの一般的な処理を行います。
タグは必要ないよ、大切なのは中身だよ、という場合には
>>> for a in soup(“a”):
… print a.contents
を試してみてください。
さて先ほどの
>>> soup(“a”)
は変数soupを使うと
>>> soup.findAll(“a”)
とも書けます。
findAllは第二引数以下にタグ内の要素を指定できます。
「ヘッダータブのaタグのみ抜き出し」ということは
divタグの要素id=”globalNav”がほしいということですので
>>> soup.findAll(“div”, id=”globalNav”)
とすることで取得できます。
このままではdivタグ全体が取れてきますので
>>> for divs in soup.findAll(“div”, id=”globalNav”):
… divs.findAll(“a”)
とすることで目的の<a>~</a>のみが取り出せましたね。
最終的に
>>> for divs in soup.findAll(“div”, id=”globalNav”):
… for aaa in divs.findAll(“a”):
… for a in aaa.contents:
… print a
…
ホーム
ソリューション
事例紹介
会社概要
CSRへの取組み
採用情報
と中身だけ取り出すことができました。
(最後強引過ぎですかね・・・。先輩のpython使いに指導されそうです。。)
—–
from BeautifulSoup import BeautifulSoup
import urllib2
url = “http://www.kdl.co.jp/“
srcHtml = urllib2.urlopen(url).read()
soup = BeautifulSoup(html)
for divs in soup.findAll(“div”, id=”globalNav”):
for aaa in divs.findAll(“a”):
for a in aaa.contents:
print a
—–


