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