データ分析エンジニアのブログ

日常のことからプログラミングや機械学習まで@六本木

【Python】urllib2とElementTreeで簡単スクレイピング


こんばんは!
今回はurllib2とElementTreeというモジュールを使った、
Pythonでの簡単なスクレイピングの方法について書いてみようと思います。


クローリングのような大規模なものになると、
scrapyやBeautifulSoup、Mechanize等のモジュールを使った方が楽ですが、
1ページだけスクレイピングして処理したいなどの場合には
こちらの方法が手軽で便利です!


今回は、Wikipediaの職業一覧から職業名を全てスクレイピングして、
コンソールに出力する、というプログラムを書いてみようと思います。


以下がコードになります。

#! /usr/bin/python
# -*- coding: utf-8 -*-

import urllib2
import xml.etree.ElementTree as etree

resp = urllib2.urlopen('http://ja.wikipedia.org/wiki/%E8%81%B7%E6%A5%AD%E4%B    8%80%E8%A6%A7').read()

tree = etree.fromstring(resp)

# HTML内のcontent部分のdivを取得
a = tree.findall('.//div[@id="mw-content-text"]/p/a[@title]')

for i in a:
  for t in i.items():
    if (t[0] == 'title'): print t[1]


ほとんど解説するところもないんですが、流れとしては、


1. urllibでHTTPリクエストを送ってHTMLを文字列として取得
2. 文字列として取得したHTMLをElementTreeを使って職業を取得
3. 出力


という感じになっています。


API以外でも、Webから情報を取得できるようになると、
様々な対象を解析できるようになるので、クローリングやスクレイピングの手法は
ぜひ使いながら覚えておくといいと思います。