[英]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']
正如@Barmar 提到的,您可以将代码修复为:
url.split("/")[-1].split("?i=")[-1]
基本上您需要将https://music.com/144?i=150
拆分为https://music.com
和144?i=150
,获取第二个元素144?i=150
,然后将其拆分为144
和150
,然后得到第二个。
如果你需要它是数字,你可以使用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.