- 1. 概要
- 2. 解析
- 3. 相対アドレスを絶対アドレスに変換
- 4. コンテンツのファイル部分を削除
- 5. 参考サイト
1. 概要
ここでは、「URL」(正しくは「URI」)を編集するためのいくつかのモジュールについて説明します。
実は、前ページまでに、既に出現しているものものがありますが、あらためてメモを残しておきます。
2. 解析
「URI」をいくつかのパーツに分ける関数として
from urllib.parse import urlparse
があります。
分けたパーツのうちわたしの使う、主なものは下記になります。
| 要素 | 意味 | 備考 |
| scheme | プロトコル | |
| netloc | ドメイン名 | |
| path | パス/コンテンツ | |
下記のような、ソースを書いて
from urllib.parse import urlparse
from pretty_python import pretty, pprint
import pprint
uri = 'https://freebsd.sing.ne.jp/lang/python/08/04.html'
parse = urlparse(uri)
pprint.pp(parse)
print(pretty(parse))
これを実行すると下記の結果が得られます。
ParseResult(scheme='https', netloc='freebsd.sing.ne.jp', path='/lang/python/08/04.html', params='', query='', fragment='')
ParseResult(scheme='https', netloc='freebsd.sing.ne.jp', path='/lang/python/08/04.html', params='', query='', fragment='')
3. 相対アドレスを絶対アドレスに変換
https://freebsd.sing.ne.jp/lang/python/08/04.html
てなコンテンツの中にリンク先として、下記のように書いてある場合
../
./03.html
リンク元のアドレスとリンク先のアドレスを結合したいようなことは、よくあるかと思います。
これを解決するのが
from urllib.parse import urljoin
になります。
urljoin(リンク元, リンク先)
の形式で記述して、絶対アドレスが戻ります。
下記のような、ソースを書いて
from urllib.parse import urljoin
uri = 'https://freebsd.sing.ne.jp/lang/python/08/04.html'
link1 = './'
link2 = '../'
link3 = './03.html'
link4 = '#2'
link5 = 'https://docs.python.org/ja/3.9/library/urllib.html'
print('urljoin', uri, '+', link1, '→', urljoin(uri, link1))
print('urljoin', uri, '+', link2, '→', urljoin(uri, link2))
print('urljoin', uri, '+', link3, '→', urljoin(uri, link3))
print('urljoin', uri, '+', link4, '→', urljoin(uri, link4))
print('urljoin', uri, '+', link5, '→', urljoin(uri, link5))
これを実行すると下記の結果が得られます。
urljoin https://freebsd.sing.ne.jp/lang/python/08/04.html + ./ → https://freebsd.sing.ne.jp/lang/python/08/
urljoin https://freebsd.sing.ne.jp/lang/python/08/04.html + ../ → https://freebsd.sing.ne.jp/lang/python/
urljoin https://freebsd.sing.ne.jp/lang/python/08/04.html + ./03.html → https://freebsd.sing.ne.jp/lang/python/08/03.html
urljoin https://freebsd.sing.ne.jp/lang/python/08/04.html + #2 → https://freebsd.sing.ne.jp/lang/python/08/04.html#2
urljoin https://freebsd.sing.ne.jp/lang/python/08/04.html + https://docs.python.org/ja/3.9/library/urllib.html → https://docs.python.org/ja/3.9/library/urllib.html
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/
5. 参考サイト
本ページは、下記のサイトを参考にさせていただきました。
「BeautifulSoup4 の find_all で タグを全てぶんまわす」(リンク切れになりました)
|