如何使用Python从url提取一些数据

如何使用Python从url提取一些数据,python,Python,我有一个url,如下所示: https://some_url/vivi/v2/ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=/BE?category=PASSENGER&make=30&model=124&regmonth=3&regdate=2015-03&body=443,4781&facelift=252&seats=4&

我有一个url,如下所示:

https://some_url/vivi/v2/ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=/BE?category=PASSENGER&make=30&model=124&regmonth=3&regdate=2015-03&body=443,4781&facelift=252&seats=4&bodyHeight=443&bodyLength=443&weight=-1&engine=1394&wheeldrive=196&transmission=400
furl(url).args['category'] // gives PASSENGER
我需要的是在
v2/
之后获取字符串,因此
zuxozmvrdzjqturxv20wq0rvrld6syteqwnocthwmgvnbfj4rdqrzzjmegrbcnhpynuzv1rpt0=

我使用
furl
提取参数值。我的做法如下:

https://some_url/vivi/v2/ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=/BE?category=PASSENGER&make=30&model=124&regmonth=3&regdate=2015-03&body=443,4781&facelift=252&seats=4&bodyHeight=443&bodyLength=443&weight=-1&engine=1394&wheeldrive=196&transmission=400
furl(url).args['category'] // gives PASSENGER
但是这里我没有参数的名称


如果您不需要一个通用的解决方案,但您提供的url有问题,我怎么做。然后您可以执行以下操作:

url="https://some_url/vivi/v2/ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=/BE?category=PASSENGER&make=30&model=124&regmonth=3&regdate=2015-03&body=443,4781&facelift=252&seats=4&bodyHeight=443&bodyLength=443&weight=-1&engine=1394&wheeldrive=196&transmission=400"
answer=url.split('/')[5]

如果你不需要一个通用的解决方案,但你提供的网址有问题。然后您可以执行以下操作:

url="https://some_url/vivi/v2/ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=/BE?category=PASSENGER&make=30&model=124&regmonth=3&regdate=2015-03&body=443,4781&facelift=252&seats=4&bodyHeight=443&bodyLength=443&weight=-1&engine=1394&wheeldrive=196&transmission=400"
answer=url.split('/')[5]
使用以下代码:

l=url.split('/')
m=l[l.index('v2')+1]
print(m)
使用以下代码:

l=url.split('/')
m=l[l.index('v2')+1]
print(m)

使用
re
所需的输出

import re

url = "https://some_url/vivi/v2/ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=/BE?category=PASSENGER&make=30&model=124&regmonth=3&regdate=2015-03&body=443,4781&facelift=252&seats=4&bodyHeight=443&bodyLength=443&weight=-1&engine=1394&wheeldrive=196&transmission=400"
re.findall(r'v2/(.*)/', url)
结果为
['ZuxOzMvrdzjqTurxV20WQ0Rvrld6SyteqWnOctHwMgVnBfJ4RdqrzzjMergbCnhPynuzv1Prpt0=']


但是以其他人提到的方式使用
split()
更安全,因为当api版本更改为
v3
时,此
re
代码将不再工作

使用
re
所需输出

import re

url = "https://some_url/vivi/v2/ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=/BE?category=PASSENGER&make=30&model=124&regmonth=3&regdate=2015-03&body=443,4781&facelift=252&seats=4&bodyHeight=443&bodyLength=443&weight=-1&engine=1394&wheeldrive=196&transmission=400"
re.findall(r'v2/(.*)/', url)
结果为
['ZuxOzMvrdzjqTurxV20WQ0Rvrld6SyteqWnOctHwMgVnBfJ4RdqrzzjMergbCnhPynuzv1Prpt0=']


但是以其他人提到的方式使用
split()
更安全,因为当api版本更改为
v3
时,此
re
代码将不再工作

您要查找的字符串不是查询参数,它是URL路径的一部分

在一般情况下,您可以使用模块将URL解析为其组件,然后访问路径。然后提取路径的所需部分:

import base64
from urllib.parse import urlparse, parse_qs

parsed_url = urlparse(url)
s = parsed_url.path.split('/')[-2]    # second last component of path
>>> s
'ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0='
>>> base64.b64decode(s)
b'eLNfekw2jMDqWm0CDoFWzK+DAchq8p0eglRxD4+g2LxdArxObu3WZQ=='

查询字符串的键和值也可以处理到字典中,并通过键进行访问:

params = parse_qs(parsed_url.query)
>>> params
{'category': ['PASSENGER'], 'make': ['30'], 'model': ['124'], 'regmonth': ['3'], 'regdate': ['2015-03'], 'body': ['443,4781'], 'facelift': ['252'], 'seats': ['4'], 'bodyHeight': ['443'], 'bodyLength': ['443'], 'weight': ['-1'], 'engine': ['1394'], 'wheeldrive': ['196'], 'transmission': ['400']}
>>> params['category']
['PASSENGER']

您要查找的字符串不是查询参数,它是URL路径的一部分

在一般情况下,您可以使用模块将URL解析为其组件,然后访问路径。然后提取路径的所需部分:

import base64
from urllib.parse import urlparse, parse_qs

parsed_url = urlparse(url)
s = parsed_url.path.split('/')[-2]    # second last component of path
>>> s
'ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0='
>>> base64.b64decode(s)
b'eLNfekw2jMDqWm0CDoFWzK+DAchq8p0eglRxD4+g2LxdArxObu3WZQ=='

查询字符串的键和值也可以处理到字典中,并通过键进行访问:

params = parse_qs(parsed_url.query)
>>> params
{'category': ['PASSENGER'], 'make': ['30'], 'model': ['124'], 'regmonth': ['3'], 'regdate': ['2015-03'], 'body': ['443,4781'], 'facelift': ['252'], 'seats': ['4'], 'bodyHeight': ['443'], 'bodyLength': ['443'], 'weight': ['-1'], 'engine': ['1394'], 'wheeldrive': ['196'], 'transmission': ['400']}
>>> params['category']
['PASSENGER']

拆分字符串并按索引获取元素拆分字符串并按索引获取元素