XMLSiteMap プログラム仕様
XMLサイトマップを生成するためのウェブクローラー
- 概要:
指定されたルートURLからウェブページを再帰的にクロールし、各ページのタイトル、 最終更新日時(Last-Modifiedヘッダーから)、およびURLを含むXMLサイトマップを作成します。
- 詳細説明:
このスクリプトは、コマンドライン引数で指定された、またはデフォルトのルートURLからクロールを開始します。 HTTPリクエストを送信し、HTMLコンテンツから関連するリンクを抽出します。 抽出されたリンクは同じドメイン内のものであれば再帰的にクロールされます。 各ページについて、<title>タグからタイトルを抽出し、HTTPレスポンスヘッダーの 'Last-Modified'フィールドから最終更新日時を取得します。 収集されたすべてのURLとそれに対応するメタデータ(タイトル、最終更新日時)は、 Sitemapプロトコルに準拠したXMLサイトマップとして整形され、指定されたファイルに出力されます。 クエリパラメータを含むURLも適切に処理され、対象は.html/.shtmlファイルまたはディレクトリパスに限定されます。
- 関連リンク:
- web.XMLSiteMap.clean_html_content(html_content)[ソース]
HTMLコンテンツから余分な空白文字や改行を削除し、整形します。
- 概要:
HTMLコンテンツから不要な改行やスペースを削除し、前後のスペースをトリムする関数。
- 詳細説明:
この関数は、HTMLコンテンツ内の複数の連続する空白文字や改行文字を単一のスペースに変換し、 文字列の前後の空白をトリムすることで、コンテンツをきれいにします。 これは、HTMLの解析やテキスト抽出を容易にするために行われます。
- web.XMLSiteMap.crawl_recursive(start_url, visited, base_domain, parent='')[ソース]
指定された開始URLから再帰的にリンクをたどり、各ページのタイトルと最終更新日時を収集します。
- 概要:
再帰的にリンクをたどる関数(クエリパラメータ含めた情報の取得対応)。
- 詳細説明:
URLを標準化し、既に訪問済みのURLはスキップします。
`requests`ライブラリを使用してURLからコンテンツを取得します。
取得したコンテンツの文字コードを検出し、デコードします。
HTTPヘッダーから`Last-Modified`情報を抽出し、YYYY-MM-DD形式にフォーマットします。
HTMLコンテンツからページのタイトルと、同じドメイン内の他のリンクを抽出します。
抽出されたリンク(対象URLのみ)に対して再帰的にこの関数を呼び出し、 全ての関連するページ情報を収集します。
- パラメータ:
- 戻り値:
クロールされた全てのURLと、それに対応するタイトルおよびLast-Modified日時を含む辞書。 エラーが発生した場合は空の辞書を返します。
- 戻り値の型:
- web.XMLSiteMap.detect_encoding(response_content)[ソース]
HTTPレスポンスのバイトコンテンツから最も適切な文字エンコーディングを検出します。
- 概要:
文字コードを判別する関数。
- 詳細説明:
`charset_normalizer`ライブラリを利用して、与えられたバイト列の文字コードを自動的に判別します。 これにより、様々なエンコーディングで提供されるウェブページを正しくデコードできます。
- 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のみがセットとして返されます。
- 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`が使用されます。
- web.XMLSiteMap.get_page_title(html_content)[ソース]
HTMLコンテンツからページのタイトルを抽出します。
- 概要:
HTMLコンテンツ内から<title>を抽出する関数。
- 詳細説明:
正規表現を使用して`<title>`タグの内容を検索し、そのテキストを返します。 タイトルが見つからない場合は、「No Title」を返します。検索は大文字小文字を区別しません。
- web.XMLSiteMap.is_target_url(url)[ソース]
指定されたURLがクロールの対象となるHTMLページまたはディレクトリパスであるかを判定します。