PythonでWebスクレイピングと言えば、BeatifulSoup(ライブラリ)が便利ですよね。
BeatifulSoupは有名なライブラリなので、基本的な使い方を知っている人は増えてきています。
しかし、プログラム1行1行の意味や、スクレイピングやトリミングの細かなテクニックは知らないという人も多いのではないでしょうか。
当記事では、
について解説します。
・機械学習や統計モデリングのプログラミング!
・一部講座は専門実践教育訓練給付制度の対象!
・ご満足できないても8日以内の申し出で全額返金!
Python3でBeatifulSoup4を使う7つの手順
Python3におけるBeatifulSoup4の使い方について、7つの手順に分けて解説します。
pipでBeatifulSoup4をインストールする
$ pip install beautifulsoup4
まずはpipコマンドでBeatifulSoup4ライブラリをインストールします。
Pythonを実行する環境(ターミナル、コマンドライン、Jupyter、Colaboratryなど)であれば、どこで実行してもOKです。
Jupyter、Colaboratryで実行する場合は、頭に「!」を付けて実行してください。
必要なライブラリをimportする
import requests
from bs4 import BeautifulSoup
いよいよPythonのプログラムを書いていきます(.pyの中のコード)。
まずは必要なライブラリをインポートしないといけないので、「requests」と「bs4からBeautifulSoup」をインポートします。
HTMLを取得する
res = requests.get('https://monoblog.jp/')
スクレイピングするURLにリクエストを送って、そのページのHTMLを取得します。
この時点ではHTMLデータをごっそり持っているだけなので、まだスクレイピングは完了していません。
BeautifulSoupオブジェクトを生成する
bs = BeautifulSoup(res.text, 'html.parser')
受け取ったHTMLをテキストデータに変換した上で、BeautifulSoupオブジェクトを生成します。
BeautifulSoupオブジェクトを生成することで、BeautifulSoupライブラリにあるスクレイピングする際に便利なメソッドを使えるようになります。
スクレイピングに便利なメソッドについてはこの後ご紹介しますね。
スクレイピングする
- find(タグ,条件)メソッド・・・該当するCSSセレクタを1つ取得
- find_all(タグ,条件)メソッド・・・該当するCSSセレクタをすべて取得
BeautifulSoupオブジェクトを生成したら、生成したオブジェクトから必要なデータだけ抽出(スクレイピング)します。
BeautifulSoupライブラリでスクレイピングに便利なメソッドは、主に上記の2つです。
使い方は以下の例を参考にしてみてください。
find例:titleタグを取得
title_bs = bs.find("title")
find_all例:classがnameのaタグをすべて取得
name_a_bs = bs.find_all("a", class_="name")
いらないデータをトリミングする
- get(要素)・・・タグ内の要素の値を取得
- text()・・・画面に表示されるテキストを取得
- split(区切り文字)・・・区切り文字でテキストを分割
- replace(検索文字,置換文字)・・・テキスト内にある検索を文字を置換
BeautifulSoupオブジェクト上でのスクレイピングが完了したら、次にいらないデータをトリミングします。
トリミングに便利なメソッドは、主に上記の4つです。
使い方は以下の動作例を参考にしてください。
get例:aタグ内のhref値を取得
url = bs.find("a").get("href")
text例:divタグ内のテキストを取得
url = bs.find("div").text()
split例:/ごとの最初の要素を取得
url = bs.find("div").text().split("/")
replace例:spanの閉じタグを削除
url = bs.find("div").text().replace("</span>")
※splitとreplaceは、一度テキストデータに変換してから実行する必要があります。
結果を出力する
print(result)
スクレイピングで得た結果を出力して、正しくデータを抽出できているか確認します。
正しく要件通りの形式でデータが抽出できていれば、スクレイピングは完了です。
おまけ:サンプルコード
最後に、おまけですぐに動かせるサンプルコードを載せておきます。
当ブログのタイトルを取得するプログラムです。
#必要なライブラリをインポート
import requests
from bs4 import BeautifulSoup
#HTMLを取得
res = requests.get('http://quotes.toscrape.com/')
#BeautifulSoupオブジェクトを生成
bs = BeautifulSoup(res.text, 'html.parser')
#タイトルを取得
title = bs.find("title").text()
#結果を出力
print(title)
まとめ
今回は「Python3でBeatifulSoup4を使う方法」について解説しました。
PythonでのWebスクレイピングはそれほど難しくありません。特にBeatifulSoupライブラリには便利なメソッドが充実しているので、スクレイピングが初めての人でも扱いやすくなっています。
この機会にあなたもPythonのWebスクレイピングを始めてみてはいかがでしょうか。
では、また。
・機械学習や統計モデリングのプログラミング!
・一部講座は専門実践教育訓練給付制度の対象!
・ご満足できないても8日以内の申し出で全額返金!