Bagaimana saya bisa mengekstrak apapun yang mengikuti garis miring terakhir di URL dengan Python? Misalnya, URL ini harus mengembalikan yang berikut:
URL: http://www.test.com/TEST1
returns: TEST1
URL: http://www.test.com/page/TEST2
returns: TEST2
URL: http://www.test.com/page/page/12345
returns: 12345
Saya sudah mencoba urlparse, tetapi itu memberi saya nama file jalur lengkap, seperti page/page/12345
.
...?foo=bar
dan Anda tidak menginginkannya; Saya akan menyarankan penggunaanurlparse
dalam kombinasi dengan saran naegbasename
.Jawaban:
Anda tidak perlu hal-hal mewah, cukup lihat metode string di perpustakaan standar dan Anda dapat dengan mudah membagi url Anda antara bagian 'nama file' dan yang lainnya:
Jadi Anda bisa mendapatkan bagian yang Anda minati hanya dengan:
sumber
url.rsplit('/', 1)
mengembalikan daftar, danurl.rsplit('/', 1)[-1]
merupakan bit setelah garis miring terakhir.http://www.example.com/foo/?entry=the/bar#another/bar
. Tetapi penguraian dasar sepertirsplit
tidak masalah jika Anda benar-benar yakin tidak akan pernah ada garis miring dalam parameter kueri atau fragmen Anda. Namun, saya ngeri memikirkan berapa banyak basis kode yang sebenarnya berisirsplit
kode ini dan bug yang terkait dengan penanganan kueri. Orang yang menginginkan KEAMANAN DAN KEANDALAN MUTLAK harus menggunakanurllib.parse()
! Anda kemudian dapat menggunakanpath
nilai yang dikembalikan dan memisahkan ITU untuk memastikan bahwa Anda HANYA memisahkan jalur.from urllib.parse import urlparse; p = urlparse("http://www.example.com/foo.htm?entry=the/bar#another/bar"); print(p.path.rsplit("/", 1)[-1])
Hasil:foo.htm
Satu cara lagi (idio (ma) tic):
sumber
rsplit
.rsplit
harus sesuai dengan tugas:sumber
Anda bisa melakukan seperti ini:
Dimana ekor akan menjadi nama file Anda.
sumber
urlparse dapat digunakan jika Anda ingin (katakanlah, untuk menghapus parameter string kueri).
Keluaran:
sumber
sumber
from pathlib import Path print(f"Path(redirected_response.url).stem: {Path(redirected_response.url).stem!r}")
Berikut cara regex yang lebih umum untuk melakukan ini:
sumber
sumber
from string import rfind
dari jawaban Andapartition
danrpartition
juga berguna untuk hal-hal seperti:sumber
Pisahkan url dan pop elemen terakhir
url.split('/').pop()
sumber
Output:
TEST2
.sumber
-1
sebagai indeks, jika tidak ini hanya berfungsi pada string dengan jumlah persis sebanyak itu/