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

时间:2017-12-08 10:46:51

标签: python

我有一个网址如下:

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

我需要的是在v2/之后获取字符串,因此ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=

我使用furl来提取参数值。我这样做:

furl(url).args['category'] // gives PASSENGER

但是这里我没有参数的名称。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

如果您不需要通用解决方案,但需要提供相关网址。然后,您可以执行以下操作:

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]

答案 1 :(得分:0)

使用以下代码:

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

答案 2 :(得分:0)

使用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)

导致['ZUxOZmVrdzJqTURxV20wQ0RvRld6SytEQWNocThwMGVnbFJ4RDQrZzJMeGRBcnhPYnUzV1pRPT0=']

但是按照其他提及的方式使用split()会更安全,因为当api版本更改为v3时,此re代码将不再有效。

答案 3 :(得分:0)

您所使用的字符串不是查询参数,它是URL路径的一部分。

在一般情况下,您可以使用urllib.parse模块将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']