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


 クラウディア


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 で タグを全てぶんまわす」(リンク切れになりました)

audiobook.jp
AbemaTV 無料体験
ハイスピードプラン
それがだいじWi-Fi
損保との違い
ネットオークションの相場、統計、価格比較といえばオークファン
EMEET 1
U-NEXT
葬送のフリーレン Prime Video
薬屋の独り言
earthcar(アースカー)
Amazonギフトカード
アフィリエイトのアクセストレード
ベルリッツ
EaseUS
【usus ウズウズ】
JETBOY
TikTok Shop 【リピート用プログラム】
サウンドハウス
5G CONNECT
健康サポート特集