Python - ウェブスクレイピング - URL 編集

 クラウディア
1. 概要
2. 解析
3. 相対アドレスを絶対アドレスに変換
4. コンテンツのファイル部分を削除

1. 概要

 ここでは、「URL」(正しくは「URI」)を編集するためのいくつかのモジュールについて説明します。  実は、前ページまでに、既に出現しているものものがありますが、あらためてメモを残しておきます。  本ページは、下記のサイトを参考にさせていただきました。
「BeautifulSoup4 の find_all で タグを全てぶんまわす」(リンク切れになりました)

2. 解析

 「URI」をいくつかのパーツに分ける関数として

from urllib.parse import urlparse
 があります。  分けたパーツのうちわたしの使う、主なものは下記になります。
 要素   意味   備考 
scheme プロトコル
netloc ドメイン名
path パス/コンテンツ

 下記のような、ソースを書いて


 [/home/hogehoge/lang/python/urllib/parse01.py] というファイルが、なかったですじゃ・・・。

 これを実行すると下記の結果が得られます。

/usr/local/bin/python: can't open file '/home/hogehoge/lang/python/urllib/parse01.py': [Errno 2] No such file or directory

3. 相対アドレスを絶対アドレスに変換


https://freebsd.sing.ne.jp/lang/python/08/04.html
 てなコンテンツの中にリンク先として、下記のように書いてある場合

../
./03.html
 リンク元のアドレスとリンク先のアドレスを結合したいようなことは、よくあるかと思います。  これを解決するのが

from urllib.parse import urljoin
 になります。

urljoin(リンク元, リンク先)
 の形式で記述して、絶対アドレスが戻ります。  下記のような、ソースを書いて  [/home/hogehoge/lang/python/urllib/urljoin01.py] というファイルが、なかったですじゃ・・・。  これを実行すると下記の結果が得られます。
/usr/local/bin/python: can't open file '/home/hogehoge/lang/python/urllib/urljoin01.py': [Errno 2] No such file or directory

4. コンテンツのファイル部分を削除

 これは、「URL」の編集というより、正確には、単なる文字列操作なのではありますが・・・。  「URL」のコンテンツファイルの部分のみをなくした文字列が欲しくなるときがあるのです。  これは、

split
rstrip
 を組み合わせて使っています。  うまく説明できませんが、例題を出すと  下記のような、ソースを書いて

uri   = 'https://freebsd.sing.ne.jp/lang/python/08/04.html'

tmp = uri.split('/')
prefix = uri.rstrip(tmp[-1])

print(uri, prefix)

 これを実行すると下記の結果が得られます。
https://freebsd.sing.ne.jp/lang/python/08/04.html https://freebsd.sing.ne.jp/lang/python/08/
earthcar(アースカー)