XMLSiteMap プログラム仕様

XMLサイトマップを生成するためのウェブクローラー

概要:

指定されたルートURLからウェブページを再帰的にクロールし、各ページのタイトル、 最終更新日時(Last-Modifiedヘッダーから)、およびURLを含むXMLサイトマップを作成します。

詳細説明:

このスクリプトは、コマンドライン引数で指定された、またはデフォルトのルートURLからクロールを開始します。 HTTPリクエストを送信し、HTMLコンテンツから関連するリンクを抽出します。 抽出されたリンクは同じドメイン内のものであれば再帰的にクロールされます。 各ページについて、<title>タグからタイトルを抽出し、HTTPレスポンスヘッダーの 'Last-Modified'フィールドから最終更新日時を取得します。 収集されたすべてのURLとそれに対応するメタデータ(タイトル、最終更新日時)は、 Sitemapプロトコルに準拠したXMLサイトマップとして整形され、指定されたファイルに出力されます。 クエリパラメータを含むURLも適切に処理され、対象は.html/.shtmlファイルまたはディレクトリパスに限定されます。

関連リンク:

XMLSiteMap.py 技術ドキュメント

web.XMLSiteMap.clean_html_content(html_content)[ソース]

HTMLコンテンツから余分な空白文字や改行を削除し、整形します。

概要:

HTMLコンテンツから不要な改行やスペースを削除し、前後のスペースをトリムする関数。

詳細説明:

この関数は、HTMLコンテンツ内の複数の連続する空白文字や改行文字を単一のスペースに変換し、 文字列の前後の空白をトリムすることで、コンテンツをきれいにします。 これは、HTMLの解析やテキスト抽出を容易にするために行われます。

パラメータ:

html_content (str) -- 処理対象のHTML文字列。

戻り値:

整形されたHTML文字列。

戻り値の型:

str

web.XMLSiteMap.crawl_recursive(start_url, visited, base_domain, parent='')[ソース]

指定された開始URLから再帰的にリンクをたどり、各ページのタイトルと最終更新日時を収集します。

概要:

再帰的にリンクをたどる関数(クエリパラメータ含めた情報の取得対応)。

詳細説明:
  1. URLを標準化し、既に訪問済みのURLはスキップします。

  2. `requests`ライブラリを使用してURLからコンテンツを取得します。

  3. 取得したコンテンツの文字コードを検出し、デコードします。

  4. HTTPヘッダーから`Last-Modified`情報を抽出し、YYYY-MM-DD形式にフォーマットします。

  5. HTMLコンテンツからページのタイトルと、同じドメイン内の他のリンクを抽出します。

  6. 抽出されたリンク(対象URLのみ)に対して再帰的にこの関数を呼び出し、 全ての関連するページ情報を収集します。

パラメータ:
  • start_url (str) -- クロールを開始するURL。

  • visited (set) -- 既に訪問済みの正規化されたURLを格納するセット。

  • base_domain (str) -- クロール対象を制限するベースドメイン。このドメイン外のURLはスキップされます。

  • parent (str) -- 現在クロール中のURLの親URL(エラーメッセージ用)。デフォルトは空文字列。

戻り値:

クロールされた全てのURLと、それに対応するタイトルおよびLast-Modified日時を含む辞書。 エラーが発生した場合は空の辞書を返します。

戻り値の型:

dict[str, dict[str, str | None]]

web.XMLSiteMap.detect_encoding(response_content)[ソース]

HTTPレスポンスのバイトコンテンツから最も適切な文字エンコーディングを検出します。

概要:

文字コードを判別する関数。

詳細説明:

`charset_normalizer`ライブラリを利用して、与えられたバイト列の文字コードを自動的に判別します。 これにより、様々なエンコーディングで提供されるウェブページを正しくデコードできます。

パラメータ:

response_content (bytes) -- HTTPレスポンスのバイト列コンテンツ。

戻り値:

検出された文字エンコーディングの文字列。

戻り値の型:

str

web.XMLSiteMap.find_urls_in_html(html_content, base_url)[ソース]

HTMLコンテンツ内からすべてのリンク(href, src, `url`属性)を抽出し、絶対URLに変換します。

概要:

HTMLコンテンツからリンクを抽出し、FQDNを生成する関数。

詳細説明:

この関数は、HTMLコンテンツ内のアンカータグの`href`属性、画像タグの`src`属性、 JavaScript内の`url`プロパティなどを正規表現で検索します。 見つかった相対URLは`urljoin`を使用して絶対URLに変換され、クロール対象のURLのみがセットとして返されます。

パラメータ:
  • html_content (str) -- リンクを抽出するHTML文字列。

  • base_url (str) -- 相対URLを解決するための基準URL。

戻り値:

抽出され、標準化された絶対URLのセット。

戻り値の型:

set[str]

web.XMLSiteMap.generate_xml_sitemap_with_metadata(urls_with_metadata, output_file=None)[ソース]

収集されたURLとそのメタデータ(タイトル、最終更新日時)から、 Sitemapプロトコルに準拠したXMLサイトマップファイルを生成します。

概要:

URLとメタデータ(タイトル、Last-Modified)から整形済みXMLサイトマップを生成する関数。

詳細説明:

xml.etree.ElementTree`を使用して、`<urlset><url><loc><title><lastmod><changefreq>`<priority>`といったSitemapプロトコル要素を含むXML構造を構築します。 `title`と`lastmod`は収集されたメタデータから設定されます。 XMLは整形され(pretty-print)、指定された出力ファイルにUTF-8エンコーディングで保存されます。 `output_file`が指定されない場合、グローバル変数`outpath`が使用されます。

パラメータ:
  • urls_with_metadata (dict[str, dict[str, str | None]]) -- URLをキーとし、タイトルとLast-Modified日時を値とする辞書。

  • output_file (str, optional) -- サイトマップを保存するファイルパス。省略された場合はグローバル設定に従います。

戻り値:

なし。サイトマップファイルが指定されたパスに生成されます。

戻り値の型:

None

web.XMLSiteMap.get_page_title(html_content)[ソース]

HTMLコンテンツからページのタイトルを抽出します。

概要:

HTMLコンテンツ内から<title>を抽出する関数。

詳細説明:

正規表現を使用して`<title>`タグの内容を検索し、そのテキストを返します。 タイトルが見つからない場合は、「No Title」を返します。検索は大文字小文字を区別しません。

パラメータ:

html_content (str) -- タイトルを抽出するHTML文字列。

戻り値:

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

戻り値の型:

str

web.XMLSiteMap.is_target_url(url)[ソース]

指定されたURLがクロールの対象となるHTMLページまたはディレクトリパスであるかを判定します。

概要:

URLがHTMLファイル(*.html)またはファイル名なし(ディレクトリパス)の場合にTrueを返す。

詳細説明:

この関数はURLを解析し、そのパスが`.html`または`.shtml`で終わるか、 あるいはスラッシュ`/`で終わる(ディレクトリを示唆する)場合にTrueを返します。 これにより、画像、CSS、JavaScriptなどの非HTMLリソースがクロール対象から除外されます。

パラメータ:

url (str) -- 判定するURL。

戻り値:

URLが対象の場合True、それ以外はFalse。

戻り値の型:

bool

web.XMLSiteMap.main()[ソース]

XMLサイトマップ生成スクリプトのメイン実行関数です。

概要:

スクリプトの主処理を実行。

詳細説明:
  1. 訪問済みURLを記録するためのセットを初期化します。

  2. `RootURL`から`crawl_recursive`関数を呼び出してウェブサイトのクロールを開始します。

  3. クロールによって見つかった全てのURLとそのメタデータ(タイトル、最終更新日時)をコンソールに出力します。

  4. `generate_xml_sitemap_with_metadata`関数を呼び出して、 収集した情報に基づいてXMLサイトマップを生成し、ファイルに保存します。

パラメータ:

None -- 引数なし。

戻り値:

なし。サイドエフェクトとしてサイトマップファイルが生成されます。

戻り値の型:

None

web.XMLSiteMap.normalize_url(url)[ソース]

URLを標準化し、フラグメント(#以降の部分)を削除します。

概要:

URLを標準化する(クエリパラメータを保持する)関数。

詳細説明:

クエリパラメータは保持しつつ、URLのフラグメント部分(ページ内の特定の位置を示す部分)を 削除することで、同じコンテンツを指す異なるURLが重複して処理されるのを防ぎます。 これにより、サイトマップのURLの重複を避けることができます。

パラメータ:

url (str) -- 標準化するURL。

戻り値:

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

戻り値の型:

str