【Python】ページのリンク切れをチェックする
機能
ページのリンク切れをチェックするPythonプログラムです。
ページ内のリンクを取得し、リンク先にアクセスします。
リンク切れ(HTTPステータスコードが200以外)のURLがあれば、コンソールに出力します。
実行結果
サンプル動画
プログラム
#! Python3 # 機能 # ページのリンク切れをチェックする # 使い方 # 1.Pythonを実行する # 実行コマンド # python link_checker.py URL # python link_checker.py https://qiita.com/hfujima/items/7d0e7624ab7e6cd649f3 import re import sys import bs4 import requests from urllib.parse import urljoin # ページ内のリンクを取得する関数 def get_link(url): # ページ取得 res = requests.get(url) res.raise_for_status() # リンク取得 soup = bs4.BeautifulSoup(res.text, "lxml") links = soup.select("a") keys = set() results = [] for link in links: # リンクURL取得 link_url = link.get("href") if not link_url: continue # URL補完 if not link_url.startswith("http"): link_url = urljoin(url, link_url) # リンクテキスト取得 link_text = link.text if not link_text: link_text = "" link_text = link_text.strip() link_text = re.sub(r"\n", " ", link_text) # 重複削除 key = link_url + link_text if key in keys: continue keys.add(key) results.append({"url": link_url, "text": link_text}) return results # ページのリンク切れをチェックする関数 def check_link(url): # リンク取得 results = get_link(url) for result in results: try: # リンクアクセス res = requests.get(result["url"]) if res.status_code != 200: print("NG URL -> " + result["url"]) except: print("ERROR URL -> ", result["url"]) if len(sys.argv) != 2: sys.exit("使い方:python link_checker.py URL") check_link(sys.argv[1])
使い方
- Pythonを実行する
実行コマンド
python link_checker.py URL
requestsとbs4をインストールしていない場合は以下のコマンドでインストールして下さい。
pip install requests pip install beautifulsoup4