Pythonで作るWebサイトブロッカー ― 業務時間中にSNSへのアクセスを自動遮断する方法
大手IT企業で働いたことがある方なら、FacebookやYouTube、InstagramといったSNS系のWebサイトが社内からアクセスできないよう制限されていることに気づいた経験があるかもしれません。
こうした制限は、サードパーティ製アプリに頼らなくても実現できます。自分専用のオリジナルツールを作れば、好きなWebサイトを自由にブロックできるのです。しかもPythonでWebサイトブロッカーを開発するのは、それほど難しいことではありません。この記事では、指定したWebサイトをブロックするPythonスクリプトの作り方を解説します。
前提条件
- Python 3.x がインストールされていること
- Pythonの基礎的な知識
作成するもの
今回開発するのは、1日のうち特定の時間帯(9時〜18時など)だけ、指定したWebサイト(Facebook、YouTubeなど)へのアクセスをブロックするPythonアプリケーションです。「勤務時間中はすべてのSNSを使えないようにしたい」といった用途を想定しています。使用するのはPythonの標準ライブラリのみなので、サードパーティ製パッケージのインストールは一切不要です。
仕組みはどうなっているのか
どのオペレーティングシステムにも「hostsファイル」が存在します。その保存場所はOSによって異なりますが、このファイルはホスト名とIPアドレスの対応関係を管理する役割を持っています。このhostsファイルにブロックしたいWebサイトを書き込むことで、アクセスを遮断するというのが本システムの仕組みです。
hostsファイルはおおよそ次のような形式になっています。

現時点ではhostsファイルに何も追記していないため、「youtube.com」は問題なく開くことができます。下のスクリーンショットは、スクリプト実行後にこのサイトが開けなくなることを確認するための、いわば「ビフォー」の状態です。

Webサイトブロッカーのソースコード
#Import libraries
import time
from datetime import datetime as dt
#Windows host file path
hostsPath=r"C:\Windows\System32\drivers\etc\hosts"
redirect="127.0.0.1"
#Add the website you want to block, in this list
websites=["www.youtube.com","youtube.com", "www.facebook.com", "facebook.com"]
while True:
#Duration during which, website blocker will work
if dt(dt.now().year,dt.now().month,dt.now().day,9) < dt.now() < dt(dt.now().year,dt.now().month,dt.now().day,18):
print ("Sorry Not Allowed...")
with open(hostsPath,'r+') as file:
content = file.read()
for site in websites:
if site in content:
pass
else:
file.write(redirect+" "+site+"\n")
else:
with open(hostsPath,'r+') as file:
content = file.readlines()
file.seek(0)
for line in content:
if not any(site in line for site in websites):
file.write(line)
file.truncate()
print ("Allowed access!")
time.sleep(5)コードのポイント
このスクリプトは無限ループの中で現在時刻を常時監視し、9時から18時の間であればhostsファイルに「127.0.0.1(ローカルホスト)」へのリダイレクト設定を追記して対象サイトをブロックします。時間帯外になると、逆にhostsファイルから該当エントリを削除し、通常のアクセスを復元します。なお、hostsファイルのパスはOSごとに異なり、macOSやLinuxでは「/etc/hosts」となる点に注意してください。また、hostsファイルの編集には管理者権限が必要です。
実行結果
Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... Sorry Not Allowed... ….
この状態で youtube.com や facebook.com を開こうとすると、次のように表示され、アクセスできなくなります。

カスタマイズのヒント
上記のコードは、目的に応じて自由に改良できます。例えば、ブロックする時間帯の変更、対象サイトの追加・削除、コンソールに表示されるメッセージの日本語化などが簡単に行えます。さらに発展させれば、曜日ごとに挙動を変えたり、設定を外部ファイルから読み込んだりすることも可能です。ぜひ自分のライフスタイルに合わせてカスタマイズしてみてください。
-
PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法
はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c
-
Pythonで作るWebサイトアラーム!指定時刻に自動でページを開く方法
はじめに この記事では、Pythonを使って「Webサイトアラーム」を作成する方法を解説します。あらかじめURLと時刻を指定しておくと、システムの時刻がその瞬間に達したとき、自動的にブラウザで目的のWebページを開いてくれるシンプルな仕組みです。 課題の概要 WebサイトのURLと時刻を入力として受け取り、システム時刻が指定時刻に達したタイミングで、ブラウザ上に該当するWebページを表示します。 ブックマークには日々利用するさまざまなWebページを保存できますが、「毎日決まった時刻に特定のページを開いて作業したい」という場面は少なくありません。たとえば、朝会の資料ページや業務システムへのログ