こんにちは。QAチームでマネージャーをしているエンジニアの斉藤(@saik1010)です。

弊社QAチームで品質向上を目的として取り組んでいる、PythonWebスクレイピングを使用した自動リンクチェッカー(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では一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにきてください。

ブライダル業界のデジタルシフトを加速させるリードエンジニア候補募集!

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る