こんにちは。QAチームでマネージャーをしているエンジニアの斉藤(@saik1010)です。
弊社QAチームで品質向上を目的として取り組んでいる、PythonのWebスクレイピングを使用した自動リンクチェッカー(HTTPステータスコードのチェック)について、
環境構築〜実際にリンクチェックを実行するところまでご紹介しようと思います。
環境
| 環境 | バージョン |
|---|---|
| macOS Sierra | 10.12.6 |
| Python | 3.6.4 |
| pyenv | 1.2.1 |
1. Pythonのインストール
Homebrewを使用し、Python3をインストールします。
汎用性の考えて、バージョン切り替えが容易にできるpyenvを使用します。
pyenvのインストール
$ brew install pyenv
インストールしたいpythonのバージョンを確認
$ pyenv install --list
pythonをインストール
$ pyenv install 3.6.4
pythonのバージョン変更
$ pyenv global 3.6.4
PATHを通す
$ vi ~/.bash_profile ↓追記する export PATH="$HOME/.pyenv/shims:$PATH"
設定を反映する
$ source ~/.bash_profile
2. Pythonライブラリのインストール
requests
HTTP通信を行うためのライブラリです。
http://requests-docs-ja.readthedocs.io/en/latest/
$ pip install requests
BeautifulSoup
HTMLやXMLファイルからデータを取り出すためのライブラリです。
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
$ pip install beautifulsoup4
3. HTTPステータスコードのチェック
インストールしたライブラリを利用して、HTTPステータスコードを実装します。
まずはPythonファイルを作成し、以下のコードを書きましょう。
※私は、test.pyとしました
ソースコード
import requests
from bs4 import BeautifulSoup
# アクセスするURL
resp = requests.get("https://www.google.co.jp/")
# BeauttifulSoupを使用してHTML整形
soup = BeautifulSoup(resp.text, 'html.parser')
# aタグからURLを取得し、HTTPリクエストを送る
for link in soup.find_all('a'):
# URLを取得し、HTTPリクエスト
url = link.get('href')
if url is None:
continue
elif url == '#':
continue
resp = requests.get(url)
# 結果をCSVに出力する
f = open('test.csv','a')
f.write(str(resp.status_code) + ',' + url + '\n')
f.close()
実行する
$ python test.py
実行結果
下記内容がtest.csvに出力されていればOKです。
200,https://www.google.co.jp/imghp?hl=ja&tab=wi 200,https://www.youtube.com/?gl=JP&tab=w1 200,https://www.google.co.jp/intl/ja/options/ 200,http://www.google.co.jp/history/optout?hl=ja 200,https://accounts.google.com/ServiceLogin?hl=ja&passive=true&continue=https://www.google.co.jp/ 200,http://www.google.co.jp/intl/ja/services/ 200,https://www.google.co.jp/setprefdomain?prefdom=US&sig=__0sQtcCi2TjmCTGxrJwKLaSvy39U%3D
まとめ
いかがでしたでしょうか?
かなりシンプルにHTTPステータスコードチェックの実装ができました!
HTMLにある要素はなんでも取得できそうなので、ステータスコード以外にも幅広く使えそうです。次回は再帰処理を利用して、リンクを深掘りした実装をしていこうと思います!
◉筆者執筆の「5分でできる自動化」シリーズ
5分でできる!Seleniumでブラウザテスト自動化入門
Wedding Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにきてください。