【Python】相対URLを絶対URLに変換する方法【スクレイピング】
スクレイピングでURL を取得したとき、
/content/ などのような相対URL が取得される場合があります。
今回は、そのような相対URLを取得してきた場合に、絶対URLに変換する方法をご紹介します。
この記事を読めば、スクレイピングでURLを取得したときも、そのURLを転用できるようになります。
目次(クリックで読みたい部分にジャンプできます)
前準備
- BeautifulSoupをインストール
- 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の入門編としての自動検索の方法をご紹介しています。
ぜひ併せて読んでみてください。