Pythonで始めるwebスクレイピング_[1]導入編


Pythonを導入から

過去に業務でPythonを使用したことはあったのですが、しばらくの間離れていたところ、ほとんど最初から学び直す羽目になりました。
会社の都合で使用する機会がありそうなので、触ってみることにしました。
ただ言語を学ぶのだと面白く無さそうなので、ついでにwebスクレイピングやクロールをしながら学んでいこうと思います。

実行環境

pythonは2系がサポート終了するので、3系でやることにします。
2系の経験がある方は2系と3系の違いは以下のようなまとめてくれている記事を参照するといいと思います。

スクレイピングのための道具を準備する

まず手始めにこちらを参考にスクレイピングをやってみます。
pythonとBeautiful Soupをインストールします。

内容はざっくり説明すると、

  • urllibを使用し、HTTPリクエストする
  • Beautiful soupを使い、取得したHTMLをパースする
  • 内容を解析し、処理する

です。
参考記事ではurllib2を使用していますが、python3系ではurllibというライブラリを使用します。
共にpythonの組み込みライブラリです。

csvに出力しているところは、必要に応じてでいいと思うので、とりあえず今はやらないこととします。

ライブラリをインポートする

まず必要なライブラリをインポートし、コード中で使用できるようにします。
ちなみに、# coding: UTF-8の記述はpython3系では不要です。
先ほどのpython2系と3系の違いをまとめてくれている記事で、2系では文字列型としてunicode型とstr型が有ったが、3系は全てunicodeになり、str型オンリーになったと書いてありました。

モジュールのインポート
import math

他の言語でも見るやつです。

Pythonでは関数やクラスなどをまとめて書いたファイルをモジュールという。

このモジュールをimportする文です。

複数インポートする
import a, b, c

とできます。が・・・
PEP8というpythonの標準ライブラリなどに関するコーディング規約があります。
このPEP8によるとこのカンマ区切りのまとめてimportは推奨されないとか。なので、

import a
import b
import ...

と書くことが推奨のようです。

オブジェクトのインポート
from math import pi

モジュールmathからオブジェクトpiをインポートする書き方です。
複数オブジェクトをインポートする時はカンマで区切って記載できます。

from math import pi, radians

PEP8ではこちらはカンマ区切りで複数インポートしてOKとのこと。
もっと大量のオブジェクトをインポートしたい時は()で括って複数行にできます。

import math import (
    pi,
    radians,
    sin,
    ....
)

さて、これで使用するライブラリをインポートする書き方が分かりました。
早速、urllibBeautiful Soupをインポートしてみます。

import urllib.request
from bs4 import BeautifulSoup

ファイルを読み込み

次に、早速どこかのURLにリクエストを飛ばし、HTMLを取得してみます。

html = urllib2.urlopen('https://www.yahoo.co.jp')

これだけです。便利な世の中ですね。
次にこの取得したhtmlをパースします。

html = urllib.request.urlopen('https://www.yahoo.co.jp')
soup = BeautifulSoup(html, 'html5lib')
print(soup)

これで取得したhtmlをパースできました。