MakeSiteMap プログラム仕様

概要: ウェブサイトのHTMLサイトマップツリービューを生成するスクリプト。

詳細説明: このスクリプトは、指定されたルートURLからウェブサイトを再帰的にクロールし、発見されたリンクから HTML形式の階層的なサイトマップツリービューを生成します。 コマンドライン引数でルートURL、出力ファイル名、ファイル除外設定、および特定のパスパターンに基づいて URLを除外する機能も持ちます。検出された各ページのタイトルと最終更新日もサイトマップに含められます。

関連リンク: MakeSiteMap_usage

web.MakeSiteMap.build_hierarchy_dict(urls_with_metadata, base_domain)

概要: フラットなURLリストから、パスに基づいた階層的な辞書構造を構築する。

詳細説明: クロールによって収集されたURLとそれに対応するメタデータ(タイトル、最終更新日)のフラットな辞書を受け取り、 URLのパスセグメントを基に、ファイルシステムのようなネストされた辞書構造を作成します。 これにより、サイトマップツリービューのレンダリングに適した階層データが準備されます。 クエリパラメータもパスの一部として扱われ、一意のURLがノードとして保持されます。 ルートURLのメタデータは、ツリー構造の最上位ノードとして特別に扱われます。

引数:
param urls_with_metadata:

URLとそれに対応するメタデータ(タイトル、最終更新日)の辞書。

type urls_with_metadata:

dict

param base_domain:

サイトマップを構築する対象のベースドメイン。

type base_domain:

str

戻り値:
returns:

階層的に整理されたサイトマップデータ構造。

rtype:

dict

web.MakeSiteMap.clean_html_content(html_content)

概要: HTMLコンテンツから改行文字を削除し、前後の空白をトリムする。

詳細説明: 与えられたHTML文字列内のすべての改行文字をスペースに置換し、 結果として生じる文字列の前後の空白を削除します。

引数:
param html_content:

処理するHTML文字列。

type html_content:

str

戻り値:
returns:

改行とトリムが適用されたHTML文字列。

rtype:

str

web.MakeSiteMap.crawl_recursive(start_url, visited, base_domain, parent='')

概要: 指定されたURLからウェブサイトを再帰的にクロールし、検出されたページのメタデータを収集する。

詳細説明: この関数は、ウェブサイトを深さ優先で再帰的にクロールします。 URLを標準化し、すでに訪問済みのURLやis_excluded_pathで除外対象と判断されたURLはスキップします。 requestsライブラリを使用してURLをフェッチし、HTTPステータスコードが200でない場合はエラーとして扱います。 detect_encodingで文字コードを判別し、コンテンツを適切にデコードします。 HTTPレスポンスヘッダーのLast-Modifiedからページの最終更新日を取得し、ISOフォーマットに変換します。 get_page_titleでページのタイトルを抽出します。 find_urls_in_htmlで現在のページ内のすべてのリンクを抽出し、base_domainと一致する内部リンクのみをフィルタリングします。 検出された子URLに対して再帰的に自身を呼び出し、すべてのURLとそのメタデータを収集します。

引数:
param start_url:

クロールを開始するURL。

type start_url:

str

param visited:

訪問済みの標準化されたURLを追跡するためのセット。

type visited:

set

param base_domain:

クロール対象のベースドメイン(異なるドメインへのリンクは追跡しない)。

type base_domain:

str

param parent:

(オプション) 現在のURLをリンクしている親URL。デバッグやトレースのために使用されます。

type parent:

str

戻り値:
returns:

URLをキーとし、タイトルと最終更新日を含む辞書。

rtype:

dict

web.MakeSiteMap.detect_encoding(response_content)

概要: レスポンスコンテンツから文字コードを判別する。

詳細説明: charset_normalizerライブラリを使用して、HTTPレスポンスのバイト列コンテンツの 文字コードを自動的に推測します。

引数:
param response_content:

文字コードを判別するバイト列コンテンツ。

type response_content:

bytes

戻り値:
returns:

判別された文字コード名。

rtype:

str

web.MakeSiteMap.find_urls_in_html(html_content, base_url)

概要: HTMLコンテンツからリンクを抽出し、絶対URLに変換して返す。

詳細説明: 与えられたHTMLコンテンツから、href, src, url()パターンにマッチするURLを 正規表現を使って抽出します。 抽出された相対URLはbase_urlを基に絶対URLに変換されます。 メーリングリスト (mailto:), 電話番号 (tel:), ページの内部アンカー (#), CSSファイル (.css), JavaScriptファイル (.js) などの特定の種類のURLは除外されます。 さらに、is_target_url関数を使って、サイトマップに含めるべきファイルタイプ (例: HTMLファイルやディレクトリパス)のURLのみを結果に含めます。

引数:
param html_content:

リンクを抽出するHTML文字列。

type html_content:

str

param base_url:

相対URLを絶対URLに変換するための基準となるURL。

type base_url:

str

戻り値:
returns:

抽出され、フィルタリングされた絶対URLのセット。

rtype:

set

web.MakeSiteMap.generate_html_sitemap_tree(urls_with_metadata, root_url, output_file)

概要: クローリング結果から階層的なHTMLサイトマップファイルを生成し、指定されたファイルパスに保存する。

詳細説明: crawl_recursive関数によって収集されたURLとメタデータの辞書を受け取り、 build_hierarchy_dict関数でこのデータを階層的な構造に変換します。 次に、render_tree関数を呼び出して、その階層構造をHTMLツリービューとしてレンダリングします。 生成されたHTMLコンテンツは、Tailwind CSSを含む事前定義されたHTMLテンプレートに埋め込まれ、 最終的なHTMLサイトマップファイルとしてoutput_fileに保存されます。

引数:
param urls_with_metadata:

クロールによって収集されたURLとメタデータの辞書。

type urls_with_metadata:

dict

param root_url:

クロールの起点となったルートURL。サイトマップの基点として表示されます。

type root_url:

str

param output_file:

サイトマップを保存するHTMLファイルのパス。

type output_file:

str

戻り値:
returns:

なし

rtype:

None

web.MakeSiteMap.get_page_title(html_content)

概要: HTMLコンテンツ内からtitleを抽出する。

詳細説明: 与えられたHTMLコンテンツからtitleタグの内容を正規表現で検索し抽出します。 大文字・小文字を区別せず検索し、見つかった場合はその内容をトリムして返します。 titleタグが見つからない場合は「No Title」を返します。

引数:
param html_content:

タイトルを抽出するHTML文字列。

type html_content:

str

戻り値:
returns:

抽出されたページのタイトル、または「No Title」。

rtype:

str

web.MakeSiteMap.is_excluded_path(url)

概要: URLパスが定義された除外パターンにマッチするかどうかをチェックする。

詳細説明: COMPILED_EXCLUDE_PATHSグローバル変数に定義された正規表現パターンに対して、 与えられたURLのパス部分(クエリパラメータを含む場合あり)がマッチするかどうかを検査します。 パスが'/'で始まっていない場合、正規表現とのマッチングのために先頭に'/'が追加されます。

引数:
param url:

チェックするURL。

type url:

str

戻り値:
returns:

除外パターンにマッチすればTrue、そうでなければFalse。

rtype:

bool

web.MakeSiteMap.is_target_url(url)

概要: URLがサイトマップに含めるべき対象かどうかを判断する。

詳細説明: URLがHTMLファイル(.htmlまたは.shtml)であるか、ファイル名がない(ディレクトリパス)である場合、 またはパスもクエリも存在しない場合はTrueを返します。 EXCLUDE_FILESがTrueに設定されている場合、exclude_file_extensionsリストに定義された 一般的なファイル拡張子を持つURLは対象外とします。

引数:
param url:

判定するURL。

type url:

str

戻り値:
returns:

対象のURLであればTrue、そうでなければFalse。

rtype:

bool

web.MakeSiteMap.main()

概要: スクリプトのメイン実行関数。

詳細説明: この関数は、コマンドライン引数を処理し、RootURL, outpath, EXCLUDE_FILES といったグローバル変数を設定します。 次に、crawl_recursive関数を呼び出してウェブサイトを再帰的にクロールし、 すべての発見されたURLとそのメタデータを収集します。 最後に、generate_html_sitemap_tree関数を呼び出して、 収集したデータから階層的なHTMLサイトマップファイルを生成します。

戻り値:
returns:

なし

rtype:

None

web.MakeSiteMap.normalize_url(url)

概要: URLを標準化し、フラグメント(#以降)を削除する。

詳細説明: urllib.parseモジュールを使用してURLを解析し、URLのフラグメント部分 ('#'に続く部分)を除去した新しいURLを再構築します。 これにより、同じコンテンツを指すがフラグメントが異なるURLが重複して扱われるのを防ぎます。 クエリパラメータは保持されます。

引数:
param url:

標準化するURL。

type url:

str

戻り値:
returns:

フラグメントが削除された標準化されたURL。

rtype:

str

web.MakeSiteMap.render_tree(data, is_root=False)

概要: 階層的な辞書構造からHTMLのツリー構造を再帰的に生成する。

詳細説明: build_hierarchy_dict関数によって構築された階層的なデータ構造を受け取り、 それをHTMLのdetails/summaryタグとul/liタグを組み合わせたツリービューとしてレンダリングします。 ディレクトリに相当するノードはdetailsタグでラップされ、初期状態で開いた状態(open属性)で表示されます。 ファイル(URL)に相当するノードはliタグ内にリンク、タイトル、URLパス、最終更新日が表示されます。 出力されるHTMLには、Tailwind CSSクラスが適用され、モダンなデザインのツリービューを提供します。

引数:
param data:

階層的なサイトマップデータ構造。

type data:

dict

param is_root:

(オプション) 現在処理中のノードがツリーのルートであるかを示すフラグ。デフォルトはFalse。

type is_root:

bool

戻り値:
returns:

生成されたHTML文字列。

rtype:

str