Python3のWebスクレイピングを使用してHTTPステータスコードチェック

Python

こんにちは。@saik1010です。
Python3のWebスクレイピングを使用してHTTPステータスコードチェックを実装する機会がありましたので、メモを残しておきます。

環境

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通信を行うためのライブラリです。
Requests: 人間のためのHTTP — requests-docs-ja 1.0.4 documentation

$ pip install requests
BeautifulSoup

HTMLやXMLファイルからデータを取り出すためのライブラリです。
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation

$ 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にある要素はなんでも取得できそうなので、ステータスコード以外にも幅広く使えそうです。次回は再帰処理を利用して、リンクを深掘りした実装をしていこうと思います!