概要
今回は、Webスクレイピングを利用して、Webサイトから任意の情報を抽出するプログラムの作成です。
何かの参考程度にこのページのソースコードを利用してみてください。
ここでは、URLを指定した場所から、指定したHTMLタグの範囲内の情報を抽出していきます。
プログラムの概要としては以下のものです。
・指定したURLから任意の情報を取得する。
・取得データの中からHTMLタグ単位で指定した範囲内の情報を抽出する。
コードとしては以下のものです。
・urlopen()で指定したURLからデータを取得する。
・取得したデータをBeautifulSoup()にて解析する。
・soup.find()で任意の情報を抽出する。
・soup.find_all()で任意の情報を取得してforループで表示する。
それでは、ファイルエディタウィンドウを開いて、任意の名前.pyのファイルを作成・保存してください。
必要なモジュールのインストール
今回のプログラムで利用するモジュールはbs4モジュールになります。
bs4モジュールは、Python付属ではないため、インストールが必要となります。
コマンドプロンプトもしくはターミナルなどでインストールを実施してください。
pip install beautifulsoup4
これで、必要なモジュールの準備完了です。
urlopen()でデータを取得する
まずはじめに、上記でインストールした各モジュールをインポートします。
from bs4 import BeautifulSoup import urllib.request as req
次に、変数(url)を用意し、取得したいデータがあるURLを変数に格納します。
今回は、このサイトのWebスクレイピングに関する記事のURLを指定しています。
url = "https://su-gi-rx.com/2017/07/16/python_4/"
次に、request.urlopen()を利用します。
上記のモジュールのインポート時に、urllib.requestをreqに変換していますので、req.urlopen()として利用します。
そして、req.urlopen(url)にて取得したデータを変数(res)に格納します。
res = req.urlopen(url)
ここまでで、urlopen()で指定したURLからデータを取得することができました。
BeautifulSoup()で取得データを解析
BeautifulSoupをインポート時、BeautifulSoupのライブラリを取り込みます。
セッション2で対象となるデータを取得済みです。
なので、変数(soup)を用意し、BeautifulSoupのインスタンスを作成します。
ここでは、BeautifulSoup()にて、第1引数にresを指定し、第2引数に解析を行うパーサーの種類を指定します。
HTMLを解析するためには、”html.parser”という値を指定します。
“HTMLを解析する(HTMLパース)”とは、HTML文法規則にのっとった文字列を、その文法に基づいて字句解析し、意味や構造を解釈することをいい、HTMLパースを行うプログラムのことをHTMLパーサーといいます。
soup = BeautifulSoup(res, 'html.parser')
あとは任意のデータを抽出すれば完了です。
任意のデータを抽出する
ここで、一度URLで指定したページのリソースを確認してみましょう。
開発者ツールを利用してページのリソースを確認することができます。
Windowsの方は、F12を押下して頂ければ表示されるかと思います。
Macの方は、optionキー+commandキー+Iを入力すると表示されます。
ページのリソースを確認してみると、<html>要素から始まり、<html>要素の中に<head>と<body>があり、<body>の中に<header>と<div>があり、、、のように様々な要素が階層構造として存在していることがみて取れるかと思います。
そこで、soup.find()を利用して、任意の要素を指定して見つけます。
title1 = soup.find("h1").string print("title = ", title1)
最後に、soup.find_all()を利用して、複数の任意の要素を一気に取得します。
p_list = soup.find_all("p") print("text = ", p_list)
これで、任意のデータを抽出するプログラムの完成となります。
# python3 # bs-select.py from bs4 import BeautifulSoup import urllib.request as req url = "https://su-gi-rx.com/2017/07/16/python_4/" # urlopen()でデータを取得 res = req.urlopen(url) # BeautifulSoup()で解析 soup = BeautifulSoup(res, 'html.parser') # 任意のデータを抽出 title1 = soup.find("h1").string print("title = ", title1) p_list = soup.find_all("p") print("text = ", p_list)
ファイルを実行して、試してみてください。
Webスクレイピングを利用すれば、画像であったり、取得したテキスト文書などをファイルに書き込んだりなど、様々な応用に使えると思います。
読んでくださった方もぜひPythonでWebスクレイピングを行ってみてください。
また、今後もプログラミングに取り組み続けていく中で、実務に利用できる学びを身につけていかなければなりません。
エンジニアの中でもいくつか学ぶ技術は変化しますが、ここではWebスクレイピング・テキストマイニング・機械学習等をご紹介しています。
エンジニアでなくても取り組みたい業務効率化・自動化に関する実務へのヒントとなったPython本をまとめた記事がありますので、そちらも合わせて参照して頂ければ幸いです。
機械学習や分析の分野に興味があり、pythonを学びたいと思っている方は是非こちらもどうぞ↓