2014-02-05 2 views
35

URL을 구문 분석하고 (일부 파이썬 라이브러리 사용) URL의 쿼리 매개 변수 부분의 키와 값으로 파이썬 사전을 반환 할 수 있습니까? 예를 들어python을 dict하기위한 URL 쿼리 매개 변수

:

url = "http://www.example.org/default.html?ct=32&op=92&item=98" 

기대 수익 :

{'ct':32, 'op':92, 'item':98} 

답변

71

사용 urlparse library :.

>>> import urlparse 
>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98" 
>>> urlparse.urlsplit(url) 
SplitResult(scheme='http', netloc='www.example.org', path='/default.html', query='ct=32&op=92&item=98', fragment='') 
>>> urlparse.parse_qs(urlparse.urlsplit(url).query) 
{'item': ['98'], 'op': ['92'], 'ct': ['32']} 
>>> dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) 
{'item': '98', 'op': '92', 'ct': '32'} 

urlparse.parse_qs()urlparse.parse_qsl() 방법을 고려하여, 쿼리 문자열을 구문 분석하는 키가 두 번 이상 발생할 수 있습니다. r은 중요 할 수 있습니다.

파이썬 3에서 urlparseurllib.parse으로 옮겨졌습니다.

+7

또는 Python3에 대한 urlparse'로'수입 urllib.parse를 사용

def qs_to_dict(qs): final_dict = dict() for item in qs.split("&"): final_dict[item.split("=")[0]] = item.split("=")[1] return final_dict 

. – michaelmeyer

+0

그리고 오래된 파이썬 (2.4 및 이전 버전)의 경우이 두 함수는 동일한 이름을 가진'cgi' 모듈에서 발견됩니다 – EdJoJob

6

파이썬 3의 경우, 복수 값이있을 수 있으므로 parse_qs의 dict 키는 목록에 있습니다. 당신이 파서를 사용하지 않으려면

>>> from urllib.parse import urlsplit, parse_qs 
>>> 
>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98" 
>>> query = urlsplit(url).query 
>>> params = parse_qs(query) 
>>> params 
{'item': ['98'], 'op': ['92'], 'ct': ['32']} 
>>> dict(params) 
{'item': ['98'], 'op': ['92'], 'ct': ['32']} 
>>> {k: v[0] for k, v in params.items()} 
{'item': '98', 'op': '92', 'ct': '32'} 
2

: 당신은 단지 첫 번째를 원하는 경우

url = "http://www.example.org/default.html?ct=32&op=92&item=98" 
url = url.split("?")[1] 
dict = {x[0] : x[1] for x in [x.split("=") for x in url[1:].split("&") ]} 
0

나는 내 프로젝트에서이 작업을 수행 할 수있는 기능을 만들 수 있습니다.

payload = "key1=value1&key2=value2&key3=value3" 
qs_to_dict(payload)