【Index対応】サイトマップ(sitemap.xml)からURL・更新時間の一覧を作るよ!Pythonで実装方法を解説

  • 2021年11月13日
  • 2023年1月16日
  • Python
  • 434view

ブログなどのWEBサイトを運用していると、URL・更新時間の一覧がほしくなるときがあります。

今回は、sitemap.xml(サイトマップ インデックス ファイル対応版)を利用してサイトマップを作っている人向けに、URL・更新時間の一覧をPythonで作成するサンプルコードを公開します!

 

サイトマップ インデックス ファイルについては、以下のサイトを確認してください。

大きなサイトマップを分割する

 

サンプルコードは、ライバルサイトの調査にも利用できますが、スクレイピングの技術を利用するため、サーバーの負荷対策は行ってください。

 

サンプルコード

#サイトマップを取り出す(2階層対応)
from bs4 import BeautifulSoup
import requests
import re
import pandas as pd
import time

xml_sitemap_url = 'あなたのサイトマップのURL  例:http://samplepage/sitemap.xml'



def get_site_info(sitemap):
    """
    以下の様なsitemapにある情報を取り出す
    <url>
    <loc>https://sample.jp/content1</loc>
    <lastmod>2021-11-07T23:59:17+00:00</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.2</priority>
    </url>
    <url>
    <loc>https://sample.jp/content2</loc>
    <lastmod>2021-11-04T11:40:38+00:00</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.2</priority>
    </url>
    """

    # 対象サイトのsitemap.xmlを指定
    response = requests.get(sitemap)
    result = response.content
    url_lists = ''

    bs = BeautifulSoup(result, 'xml')


    #url分のループ
    xml_url_list = bs.select('url')

    output_url_list = []
    for url in xml_url_list:
        url_dict = {}
        #urlの取り出し
        loc = url.select('loc')
        loc = re.sub('<[a-z]>', '', loc[0].text)
        url_dict["loc"] = loc

        #更新時間取り出し
        lastmod = url.select('lastmod')
        lastmod = re.sub('<[a-z]>', '', lastmod[0].text)
        url_dict["lastmod"] = lastmod
        output_url_list.append(url_dict)
        
    return output_url_list



#サイトマップ一覧(サイトマップ インデックス ファイル)を取得する
response = requests.get(xml_sitemap_url)
result = response.content
url_lists = ''

bs = BeautifulSoup(result, 'xml')
xml_sitemap_list = bs.select('sitemap')

sitemap_list = []
for url in xml_sitemap_list:
    url_dict = {}
    #urlの取り出し
    loc = url.select('loc')
    loc = re.sub('<[a-z]>', '', loc[0].text)
    sitemap_list.append(loc)
    


output_url_list = []
for sitemap in sitemap_list:
    time.sleep(2) #負荷対策で地味に重要
    d_list = get_site_info (sitemap)
    output_url_list.extend(d_list)


sitemap_df = pd.DataFrame(output_url_list)
sitemap_df.to_csv("sitemap_list.csv")


 

以上の結果、以下のようなサイトマップからurl,更新時間(UTC時間になっています)を取り出すことができます。

 

めでたし、めでたし

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア
最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG