【Python】相対URLを絶対URLに変換する方法【スクレイピング】

スクレイピングでURL を取得したとき、

/content/ などのような相対URL が取得される場合があります。

今回は、そのような相対URLを取得してきた場合に、絶対URLに変換する方法をご紹介します。

この記事を読めば、スクレイピングでURLを取得したときも、そのURLを転用できるようになります。

目次(クリックで読みたい部分にジャンプできます)

前準備

  1. BeautifulSoupをインストール
  2. requestsをインストール

今回の実装に必要なことはこれだけです。

requestsは特定のURLにアクセスしたときに、HTTP通信でレスポンスをもらうためにあります。

BeautifulSoupは、requestsで取得したレスポンス(HTMLファイル)をタグごとに分ける処理を行います。

BeautifulSoupの詳しい使い方については、この記事では割愛しますが、知りたい方は以下の記事を参考にしてみてください。

では、以下からコードの説明をしていきます。

相対URLの取得

まずは、普通にBeautifulSoupで普通にURLを取得したいと思います。

今回の取得先は、wikipediaのサイドバーのURLを取得してくるとします。

サイドバーの中の、コミュニティポータルのURLを取得してこようと思いまうす。

取得するためのコードは以下の通りです。

import requests
from bs4 import BeautifulSoup
import urllib

url= "https://ja.wikipedia.org/"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
#URLをそのまま持ってくる
category = soup.find("li", attrs={"id":"n-portal"})
category_url = category.find('a').get('href')
print(category_url)

(詳しいBeautifulSoupの使い方などはこちらの記事を参考にしてください)

実行すると以下のように取得されます。

/wiki/Wikipedia:%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BB%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB

こちらは、相対URLになっており、このままURLにアクセスすることはできません。

なので絶対URLにする必要があります。

あべべ

なお、相対URLか絶対URLかは、URLの中身を確認してからではないとわからないので、全てが相対URLだとは思わないでくださいね。

絶対URLに変換する

絶対URLに変換するには、元のURLにスクレイピングした相対URLをくっつけるだけで済みます。

URLをくっつけるには、urllib.parse.urljoinを使います。

long_category_url = urllib.parse.urljoin(url, category_url)
print(long_category_url)

このコードを相対URL取得したコードの後に記載すれば完成です。

以下に全コードを記載しておきます。

import requests
from bs4 import BeautifulSoup
import urllib

url= "https://ja.wikipedia.org/"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
#URLをそのまま持ってくる
category = soup.find("li", attrs={"id":"n-portal"})
category_url = category.find('a').get('href')
print(category_url)

long_category_url = urllib.parse.urljoin(url, category_url)
print(long_category_url)

まとめ

今回は、スクレイピングで取得した相対URLを絶対URLへ変換する方法を紹介しました。

スクレイピングの方法にも触れましたが、Pythonにはこのようなスクレイピングのモジュールが他にもあります。

例えば、自動検索などをしてくれるseleniumというモジュールもその一つです。自動でログインすることなども可能なので、ログイン後の内容を取得することも可能なのです。

以下の記事ではseleniumの入門編としての自動検索の方法をご紹介しています。

ぜひ併せて読んでみてください。

(Visited 41 times, 1 visits today)