如何获取 URL 中最后一个斜杠之后的所有内容?

如何在 Python 中提取 URL 中最后一个斜杠后面的内容?例如,这些 URL 应该返回以下内容:

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

我尝试了 urlparse,但它提供了完整路径文件名,比如 page/page/12345

156498 次浏览

你不需要什么花哨的东西,只要看看 标准库中的字符串方法,你就可以很容易地在“文件名”部分和其余部分之间分割你的 URL:

url.rsplit('/', 1)

这样你就可以得到你感兴趣的部分,只需要:

url.rsplit('/', 1)[-1]

rsplit 应该能够胜任这项任务:

In [1]: 'http://www.test.com/page/TEST2'.rsplit('/', 1)[1]
Out[1]: 'TEST2'
extracted_url = url[url.rfind("/")+1:];

还有一种方法:

URL.split("/")[-1]

首先从 URL 中提取 path 元素:

from urllib.parse import urlparse
parsed= urlparse('https://www.dummy.example/this/is/PATH?q=/a/b&r=5#asx')

然后你可以用字符串函数提取最后一段:

parsed.path.rpartition('/')[2]

(导致 'PATH'的例子)

url ='http://www.test.com/page/TEST2'.split('/')[4]
print url

输出: TEST2

如果愿意,可以使用 urlparse (比如,去掉任何查询字符串参数)。

import urllib.parse


urls = [
'http://www.test.com/TEST1',
'http://www.test.com/page/TEST2',
'http://www.test.com/page/page/12345',
'http://www.test.com/page/page/12345?abc=123'
]


for i in urls:
url_parts = urllib.parse.urlparse(i)
path_parts = url_parts[2].rpartition('/')
print('URL: {}\nreturns: {}\n'.format(i, path_parts[2]))

产出:

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


URL: http://www.test.com/page/page/12345?abc=123
returns: 12345

你可以这样做:

head, tail = os.path.split(url)

其中 tail 将是您的文件名。

拆分 url 并弹出最后一个元素 url.split('/').pop()

这里有一个更通用的 regex 方法:

    re.sub(r'^.+/([^/]+)$', r'\1', url)
os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
>>> folderD

使用 urlparse获得路径,然后使用 分开获得 /字符上的路径:

from urllib.parse import urlparse


my_url = "http://example.com/some/path/last?somequery=param"
last_path_fragment = urlparse(my_url).path.split('/')[-1]  # returns 'last'

注意 : 如果您的 url 以 /字符结束,上面的代码将返回 ''(即空字符串)。如果您想要以不同的方式处理这种情况,那么在分割路径之前,您需要 脱衣服的最后一个结尾 /字符:

my_url = "http://example.com/last/"
# handle URL ending in `/` by removing it.
last_path_fragment = urlparse(my_url).path.rstrip('/', 1).split('/')[-1]  # returns 'last'

分割 URL 并弹出最后一个元素

const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];


console.log(plants.pop());
// expected output: "tomato"


console.log(plants);
// expected output: Array ["broccoli", "cauliflower", "cabbage", "kale"]

下面的解决方案使用 pathlib解析从 urllib.parse获得的路径,即使存在终端斜杠,也可以获得最后一部分:

import urllib.parse
from pathlib import Path


urls = [
"http://www.test.invalid/demo",
"http://www.test.invalid/parent/child",
"http://www.test.invalid/terminal-slash/",
"http://www.test.invalid/query-params?abc=123&works=yes",
"http://www.test.invalid/fragment#70446893",
"http://www.test.invalid/has/all/?abc=123&works=yes#70446893",
]


for url in urls:
url_path = Path(urllib.parse.urlparse(url).path)
last_part = url_path.name  # use .stem to cut file extensions
print(f"{last_part=}")

收益率:

last_part='demo'
last_part='child'
last_part='terminal-slash'
last_part='query-params'
last_part='fragment'
last_part='all'

如果只想获取路径,而不是查询参数或散列:

new URL(document.URL).pathname.split('/').reverse()[0];