Photo by Kat Juska on Unsplash |
Blogger のサイトマップがある場所
以前調べたので、Blogger のサイトマップがどこにあるのかはわかっている。
Blogger のサイトマップを Google Search Console に送る方法https://rteak-blog.blogspot.com/sitemap.xml
sitemap.xml
の中を見ると次のようになっている。
(元々改行やインデントはなく、後で編集したもの。)
page=1 と page=2
がある。
今後投稿記事が増えたら、これらも増えていく。( 150 記事ずつ?)
それぞれの中に、投稿記事の URL(<loc>
~ </loc> で囲まれている)
と最終更新日(<lastmod> ~ </lastmod> で囲まれている)が記載されている。
(下図は page=2 の方。これも改行やインデントはなく、後で編集したもの。)
投稿記事の URL と最終更新日を抜き出す方法
投稿記事の URL と最終更新日時を抜き出すには、ライブラリ requests と re を使用する。
また、各投稿記事のタイトルを抜き出すには、ライブラリ
BeautifulSoup を使用する。
手順は次のとおり。
- サイトマップを取得する(34 行目~ 38 行目参照)
requests で https://rteak-blog.blogspot.com/sitemap.xml の中身をテキスト化し、re で <loc> ~ </loc> で囲まれている部分(サイトマップの URL )をリスト( sitemap )にセットする。
今回の場合は、 https://rteak-blog.blogspot.com/sitemap.xml?page=1 と https://rteak-blog.blogspot.com/sitemap.xml?page=2 をリスト( sitemap )にセットする。 - サイトマップの数だけ処理を繰り返す( 41 行目参照)
リスト( sitemap )の要素数分繰り返す。
今回はサイトマップが 2 つあるので、2 回繰り返す。 - 投稿記事の URL と最終更新日を抜き出す( 43 行目~ 49 行目参照)
requests で各サイトマップの中身をテキスト化し、re で <loc> ~ </loc> で囲まれている部分(投稿記事の URL )をリスト( loc )にセットする。
また、<lastmod> ~ T で囲まれている部分(最終更新日)をリスト( lastmod )にセットする。
~ </lastmod> としなかったのは、時刻は不要だったため。
47 行目で <url> の前に改行コードを入れているのは、改行コードで文字列を区切ることにより、findall で文字列をうまく抜き出すため。 - 投稿記事のタイトルを抜き出す( 51行目~ 55行目参照)
各サイトマップの URL と最終更新日をすべて抜き出してから投稿記事のタイトルを抜き出す。
requests で投稿記事の URL の中身をテキスト化し、BeautifulSoup で title タグに記載されているタイトルを抜き出して、リスト( title )にセットする。 - サイトマップを HTML で編集する( 5行目~ 24行目参照)
投稿記事の URL 、タイトル、最終更新日をテーブル表示できるよう HTML で編集する。
今後の課題
そもそも次のことがやりたくて、この課題に取り組み始めた。
- 出力した HTML を自動でサイトマップのページに表示させたい。
- 各記事を自然言語処理でテキスト分類し、関連記事を自動で表示できるようにしたい。
早々に解決したいと思っている。