繁体   English   中英

无法使用拆分操作从 URL 中正确提取 ID

[英]cannot extract ID correctly from URL using split operation

我在 python 中使用标准拆分操作从 url 中提取 id。 它适用于https://music.com/146形式的网址,我需要提取 146 但在这些情况下失败

https://music.com/144?i=150

使用标准后, i需要从哪里提取150

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

有更好的方法吗?

Python 提供了一些工具来简化这个过程。

正如@Barmar 提到的,您可以使用urlsplit来拆分 URL,从而为您提供一个命名元组:

>>> from urllib import parse as urlparse
>>> x = urlparse.urlsplit('https://music.com/144?i=150')
>>> x
SplitResult(scheme='https', netloc='music.com', path='/144', query='i=150', fragment='')

您可以使用parse_qs函数将查询字符串转换为字典:

>>> urlparse.parse_qs(x.query)
{'i': ['150']}

或者在一行中:

>>> urlparse.parse_qs(urlparse.urlsplit('https://music.com/144?i=150').query)['i']
['150']

在 Python 中处理 URL 的一个特别有用的工具是furl ,它提供了一个模仿 Python 标准pathlib模块的便利性的接口。

访问查询字符串中的参数(URL 的?之后的部分)就像使用所需参数的名称索引 URL 的args属性一样简单:

>>> from furl import furl
>>> url = furl('https://music.com/144?i=150')
>>> url.args['i']
'150'

在我看来,这比使用urllib容易得多。

正如@Barmar 提到的,您可以将代码修复为:

url.split("/")[-1].split("?i=")[-1]

基本上您需要将https://music.com/144?i=150拆分为https://music.com144?i=150 ,获取第二个元素144?i=150 ,然后将其拆分为144150 ,然后得到第二个。

如果你需要它是数字,你可以使用int(url.split("/")[-1].split("?i="))[-1]

你可以使用正则表达式

import re
url = 'https://music.com/144?i=150'
match = re.search(r'(\d+)\?', url)
if match:
   value = match[1] # 144

如果你需要150

match = re.search(r'i=(\d+)', url)
if match:
   value = match[1] # 150

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM