【Python】WEBスクレイピングをしてみよう

【Python】WEBスクレイピングをしてみよう
2018年2月6日

PythonでWEBスクレイピングを実装してみたのでやってみたことを書いてみます。

 

WEBスクレイピングとは

WEBサイトからWEBページのHTMLデータを収集して、特定のデータを抽出、整形し直すことである。

なぜ今回WEBスクレイピングが必要になったか
・職場での日々の印刷枚数のデータ化したい。
・印刷枚数のデータは複合機のWEB管理画面で確認できる。
・画面表示では確認できるがデータを取得することができない(API×、CSVエクスポート×)
・印刷枚数はカラー、モノクロ、印刷、コピーそれぞれの総合計しかデータがない。

これらの理由として複合機のWEB管理画面から定期的にデータをWEBスクレイピングで取得してみよう。
といった目的でWEBスクレイピングの技術を習得することとなった。

 

PythonでWEBスクレイピング

WEBスクレイピングはいろんな言語で可能。
PHP,Javascript,C#などいろいろ。
だが今回はPythonでやってみた。
なぜか、
・過去にPython Boot Campに参加してWEBスクレイピングを体験したことがある。

なので、
pythonのBoot Campのテキストを頼りとして早速やってみた。
http://bootcamp-text.readthedocs.io/

 

環境構築

今回は省略
Pythonのバージョンは3.6.3です。

 

ライブラリーインストール

今回必要なライブラリーをインストール。
pipコマンドを使います。

pip install requests
pip install beautifulsoup4

 

WEBスクレイピングの実施

今回はテストとしていつも情報収集でお世話になっているGigazinからタイトルタグの文字列を取得してみます。

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
 
#対象ページへアクセス
res = requests.get('http://gigazine.net/')
content = res.content
 
#スクレイピングしたページデータを整形する
soup = BeautifulSoup(content, 'html.parser')
 
# タイトル要素を取得する
title_tag = soup.title
 
# 要素の文字列を取得する
title = title_tag.string
 
# タイトル要素を出力
print(title_tag)
 
# タイトルを文字列を出力
print(title)

これを実行してみた結果。

python scraping.py
<title>GIGAZINE(ギガジン) - Googleスマホの「Pixel 2」に隠されたビジュアルコア解放でInstagramなどでもHDR+機能が使えるように</title>
GIGAZINE(ギガジン) - Googleスマホの「Pixel 2」に隠されたビジュアルコア解放でInstagramなどでもHDR+機能が使えるように

最初のprintは<title></title>の要素を出力している。
次のprintで<title>タグに設定されている文字列を出力している。
※Gigazinのタイトルはその日の最新記事によって変わります。

後は色々コードを変えることで取得するタグを変えたり画像データを取得することができるようになる。

最後に

WEBスクレイピングのような軽いプログラムでも過度なアクセスはサーバーに負担をかける恐れがあります。
常識の範囲内での使用をオススメします。