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

mix*_*mix 93 python url parsing

如何在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
Run Code Online (Sandbox Code Playgroud)

我已经尝试过urlparse,但这给了我完整的路径文件名,例如page/page/12345.

Luk*_*404 214

你不需要花哨的东西,只需看看标准库中的字符串方法,你就可以轻松地在"文件名"部分和其余部分之间拆分你的网址:

url.rsplit('/', 1)
Run Code Online (Sandbox Code Playgroud)

所以你可以通过以下方式得到你感兴趣的部分:

url.rsplit('/', 1)[-1]
Run Code Online (Sandbox Code Playgroud)

  • `url.rsplit('/',1)`返回一个列表,`url.rsplit('/',1)[ - 1]`是最后一个斜杠之后的位. (9认同)
  • **警告:** 这个基本技巧在诸如“http://www.example.com/foo/?entry=the/bar#another/bar”之类的 URL 上完全失效。但是,如果您绝对确定查询或片段参数中永远不会有任何斜杠,那么像“rsplit”这样的基本解析是可以的。然而,一想到有多少代码库实际上包含这个“rsplit”代码及其与查询处理相关的错误,我就不寒而栗。**想要绝对安全和可靠性的人应该使用“urllib.parse()”!然后,您可以使用它返回的“path”值并拆分该值,以确保您仅拆分了路径。** (9认同)
  • **代码:如何实现更好方法的示例:** `from urllib.parse import urlparse; p = urlparse("http://www.example.com/foo.htm?entry=the/bar#another/bar"); print(p.path.rsplit("/", 1)[-1])` 结果:`foo.htm` (8认同)
  • 另一种方法是:url.rsplit('/',1).pop() (5认同)

Kim*_*ais 61

一个(idio(ma)tic)方式:

URL.split("/")[-1]
Run Code Online (Sandbox Code Playgroud)

  • 是的,这比使用“rsplit”更简单。 (2认同)

Ben*_*end 14

rsplit 应该完成任务:

In [1]: 'http://www.test.com/page/TEST2'.rsplit('/', 1)[1]
Out[1]: 'TEST2'
Run Code Online (Sandbox Code Playgroud)


Win*_*ton 8

你这样做:

head, tail = os.path.split(url)
Run Code Online (Sandbox Code Playgroud)

tail将成为您的文件名.


Jac*_*Wan 6

如果你愿意,可以使用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]))
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

  • 使用 `urlparse` 是正确的答案,但是如果您的 url 以 `/` 结尾,这将返回 `""`。 (2认同)
  • 使用 `i.rstrip('/')` 可以解决以 / 结尾的空路径问题 (2认同)

san*_*odi 5

这是执行此操作的更通用的正则表达式方法:

    re.sub(r'^.+/([^/]+)$', r'\1', url)
Run Code Online (Sandbox Code Playgroud)


Roc*_*han 5

os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
Run Code Online (Sandbox Code Playgroud)
>>> folderD
Run Code Online (Sandbox Code Playgroud)