📂

ColaboratoryでサイトマップのURLを一覧取得する方法

2021/02/16に公開

Webサイト制作をしているとサイトのURLを一覧取得したいケースがあるかと思います。
そんな時、サクッと手間をかけずに対応できる方法をまとめました。
この記事では以下の技術や言語、ツールを用いて行いました。

  • Webスクレイピング
  • Python
  • Colaboratory

この記事で行うこと

特定サイトのsitemap.xmlからサイトURLを抽出し、処理結果をテキストファイルに出力してダウンロードする。

Webスクレイピングとは

Webスクレイピングはウェブサイトから特定の情報を抽出するコンピュータソフトウェア技術のことで、情報収集の自動化などで利用されます。

Pythonとは

Pythonは機械学習や統計処理などでよく利用されるサーバーサイド言語です。
この記事で紹介する内容はPythonについて詳しく知らなくても問題ありません。
https://www.python.org/

Colaboratoryとは

ColaboratoryはGoogleが提供するサービスでブラウザからPythonを記述、実行できます。
環境構築の手間を省くことができ、書いたコードも簡単に共有できます。
https://colab.research.google.com/notebooks/intro.ipynb

1. Colaboratoryの利用方法

すでにGoogleアカウント取得済であれば、Colaboratoryをすぐに利用できます。
Googleドライブを開き、「新規」→「その他」→「アプリを追加」を選択してColaboratoryをインストールします。
Colaboratory導入手順1

インストールが完了したらColaboratoryを開き、「ファイル」→「ノートブックを新規作成」でノートブックを作成します。
ノートブック名が「Untitled0.ipynb」のようになっているので任意の名前を付与しておきましょう!
Colaboratory導入手順2

以上でコードを記述する準備は整いました!
すぐに利用したい方は次のコードをコピペしてそのまま利用できます。

コードをコピペできれば取得したいサイトのXMLサイトマップURLを指定します。

# 対象サイトのsitemap.xmlを指定
response = requests.get('https://example.com/sitemap.xml')

ここではhttps://example.com/sitemap.xmlとしています。
https://developers.google.com/search/docs/advanced/sitemaps/overview?hl=ja

sitemap.xmlが見当たらない場合はサイトマップページからURLを取得するなどを検討する必要があります。
実際のページから要素を取得するにはHTML構造に大きく影響を受けるためこの記事では解説を割愛します。

最後に左の実行ボタンを押下します。

コードの実行が完了すると、Colaboratory上でサイトの一覧が出力されます。また出力結果がテキストファイルになってダウンロードされます。
コードの内容を自分で調整したい方は次の章を読んでみてください。

2. コードの記述

まずPythonでWebスクレイピングするために必要なライブラリを読み込みます。

from google.colab import files
from bs4 import BeautifulSoup
import requests
import re

from google.colab import files はファイルをアップロード、ダウンロードするために利用されます。今回は処理結果をテキストファイルにしてダウンロードする際利用します。

from bs4 import BeautifulSoup ではスクレイピングの定番ライブラリBeautiful Soup 4を読み込んでいます。
この記事ではxmlファイルの中から特定のタグを抽出する際に利用しています。
https://www.crummy.com/software/BeautifulSoup/bs4/doc/

import requests ではPythonでHTTPリクエストを行う際に利用するモジュールを読み込みます。
この記事ではsitemap.xmlをGETリクエストする際に利用しています。
https://requests-docs-ja.readthedocs.io/en/latest/user/quickstart/

import re では正規表現を行うために必要なモジュールを読み込んでいます。
この記事ではサイトURLだけを抽出する際に利用しています。
https://docs.python.org/ja/3/library/re.html

以下記述でXMLサイトマップにGETリクエストしてコンテンツを取得します。
さらに抽出したURLを格納しておくために空の変数を作成しておきます。

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

レスポンス結果からBeautifulSoupオブジェクトを作成します。
locタグにサイトURLが記載されているためfor文と正規表現を使って取得します。

bs = BeautifulSoup(result, 'html.parser')

loc_list = bs.select('loc')
for loc in loc_list:
    url_lists += re.sub('<[a-z]>', '', loc.text)
    url_lists += '\n'

処理結果をprint()関数で出力します。
必要に応じて出力したいフォーマットに書き換えてください。

# サイトURL一覧出力
print('#'*50)
print('▼サイトURL一覧')
print(url_lists)
print('#'*50)

処理結果をテキストファイルに書き込み、ダウンロードします。

# サイトURL一覧ダウンロード
with open('sitemap.txt', 'w') as f:
  f.write('▼サイトURL一覧\n')
  f.write('#'*50 + '\n')
  f.write(url_lists)

files.download('sitemap.txt')

以上の記述が完了したらコードを実行して処理結果を確認してみましょう!

まとめ

Colaboratoryを利用することで手間をかけずに日々の作業を自動化できます。
ただし、Webスクレイピングを行う場合は対象サイトのサーバーに負荷をかけてしまう行為なので節度をもった対応が必要です。

参考URL

https://qiita.com/sawa---i/items/b7a3c9a27affd224a003
https://qiita.com/Chanmoro/items/db51658b073acddea4ac

Discussion