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