python을 딕트하기 위한 URL 쿼리 매개 변수
(일부 파이썬 라이브러리를 사용하여) URL을 구문 분석하고 URL의 쿼리 매개 변수 부분의 키와 값으로 파이썬 사전을 반환하는 방법이 있습니까?
예:
url = "http://www.example.org/default.html?ct=32&op=92&item=98"
예상 수익률:
{'ct':32, 'op':92, 'item':98}
라이브러리 사용:
>>> from urllib import parse
>>> url = "http://www.example.org/default.html?ct=32&op=92&item=98"
>>> parse.urlsplit(url)
SplitResult(scheme='http', netloc='www.example.org', path='/default.html', query='ct=32&op=92&item=98', fragment='')
>>> parse.parse_qs(parse.urlsplit(url).query)
{'item': ['98'], 'op': ['92'], 'ct': ['32']}
>>> dict(parse.parse_qsl(parse.urlsplit(url).query))
{'item': '98', 'op': '92', 'ct': '32'}
그urllib.parse.parse_qs()
그리고.urllib.parse.parse_qsl()
메소드는 키가 두 번 이상 발생할 수 있고 순서가 중요할 수 있다는 점을 고려하여 쿼리 문자열을 구문 분석합니다.
만약 당신이 여전히 파이썬 2에 있다면,urllib.parse
라고 불렸습니다.
Python 3의 경우 dict 값은parse_qs
값이 여러 개 있을 수 있으므로 목록에 있습니다.첫 번째 것만 원한다면,
>>> 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'}
파서를 사용하지 않으려는 경우:
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("&") ]}
그래서 위에 있는 것은 삭제하지는 않겠지만 당신이 사용해야 할 것은 절대 아닙니다.
제가 몇 개의 답을 읽었을 때 약간 복잡해 보였습니다. 저와 같은 경우에는 제 해결책을 사용하지 마십시오.
사용:
from urllib import parse
params = dict(parse.parse_qsl(parse.urlsplit(url).query))
Python 2의 경우.x
import urlparse as parse
params = dict(parse.parse_qsl(parse.urlsplit(url).query))
저는 이것이 단지 복사할 수 있는 하나의 라이너에서 허용된 답변과 동일하다는 것을 알고 있습니다.
python 2.7의 경우
In [14]: url = "http://www.example.org/default.html?ct=32&op=92&item=98"
In [15]: from urlparse import urlparse, parse_qsl
In [16]: parse_url = urlparse(url)
In [17]: query_dict = dict(parse_qsl(parse_url.query))
In [18]: query_dict
Out[18]: {'ct': '32', 'item': '98', 'op': '92'}
저는 휠을 재창조하지 않는 것에 동의하지만 가끔 (배우는 동안) 휠을 이해하기 위해 휠을 만드는 것이 도움이 됩니다. :) 그래서 순수한 학문적 관점에서, 사전을 사용하는 것은 이름 값 쌍이 고유하다고 가정한다는 경고와 함께 이것을 제공합니다(쿼리 문자열에 여러 레코드가 포함되어 있지 않음).
url = 'http:/mypage.html?one=1&two=2&three=3'
page, query = url.split('?')
names_values_dict = dict(pair.split('=') for pair in query.split('&'))
names_values_list = [pair.split('=') for pair in query.split('&')]
Idle IDE에서 버전 3.6.5를 사용하고 있습니다.
from urllib.parse import splitquery, parse_qs, parse_qsl
url = "http://www.example.org/default.html?ct=32&op=92&item=98&item=99"
splitquery(url)
# ('http://www.example.org/default.html', 'ct=32&op=92&item=98&item=99')
parse_qs(splitquery(url)[1])
# {'ct': ['32'], 'op': ['92'], 'item': ['98', '99']}
dict(parse_qsl(splitquery(url)[1]))
# {'ct': '32', 'op': '92', 'item': '99'}
# also works with url w/o query
parse_qs(splitquery("http://example.org")[1])
# {}
dict(parse_qsl(splitquery("http://example.org")[1]))
# {}
오래된 질문입니다. 이 문제를 접한 후에 제가 끼어들었습니다.splitquery
물건이 많은저는 파이썬 2를 사용하지 않기 때문에 파이썬 2에 대해서는 잘 모르겠습니다.splitquery
보다 약간 더 많습니다.re.split(r"\?", url, 1)
.
위해서python2.7
사용 중urlparse
dict할 URL 쿼리를 구문 분석하는 모듈입니다.
import urlparse
url = "http://www.example.org/default.html?ct=32&op=92&item=98"
print urlparse.parse_qs( urlparse.urlparse(url).query )
# result: {'item': ['98'], 'op': ['92'], 'ct': ['32']}
WSGI, 파이썬 2.7
코드
import sys
import json
import cgi
import urlparse
def application(environ, start_response):
status = '200 OK'
method = environ['REQUEST_METHOD']
args = urlparse.parse_qs(environ['QUERY_STRING'])
m = args['mesg']
x = {
"input": m[0],
"result": m[0].capitalize()
}
# convert into JSON:
y = json.dumps(x)
output = y
response_headers = [('Content-type', 'application/json'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
print (sys.version_info)
return [output]
URL
http:///echo.py?mesg=hola
대답
{"input": "hola", "result": "hola"}
특정 라이브러리를 사용하여 URL을 쉽게 구문 분석할 수 있습니다.
여기 전용 라이브러리 없이 구문 분석할 수 있는 간단한 코드가 있습니다.
(입력 URL에는 도메인 이름, 프로토콜 및 경로가 포함되어야 합니다.
deparseURL(url):
seg2 = url.split('/')[2] # Separating domain name
seg1 = url.split(seg2)[-2] # Deriving protocol
print('Protocol:', seg1, '\n')
print('Domain name:', seg2, '\n')
seg3 = url.split(seg2)[1] #Getting the path; if output is empty,the there is no path in URL
print('Path:', seg3, '\n')
if '#' in url: # Extracting fragment id, else None
seg4 = url.split('#')[1]
print('Fragment ID:', seg4, '\n')
else:
seg4 = 'None'
if '@' in url: # Extracting user name, else None
seg5 = url.split('/')[-1]
print('Scheme with User Name:', seg5, '\n')
else:
seg5 = 'None'
if '?' in url: # Extracting query string, else None
seg6 = url.split('?')[-1]
print('Query string:', seg6, '\n')
else:
seg6 = 'None'
print('**The dictionary is in the sequence: 0.URL 1.Protocol 2.Domain name 3.Path 4.Fragment id 5.User name 6.Query string** \n')
dictionary = {'0.URL': url, '1.Protocol': seg1, '2.Domain name': seg2, '3.Path': seg3, '4.Fragment id': seg4,
'5.User name': seg5, '6.Query string': seg6} # Printing required dictionary
print(dictionary, '\n')
print('The TLD in the given URL is following: ')
if '.com' in url: # Extracting most famous TLDs maintained by ICAAN
print('.com\n')
elif '.de' in url:
print('.de\n')
elif '.uk' in url:
print('.uk\n')
elif 'gov' in url:
print('gov\n')
elif '.org' in url:
print('.org\n')
elif '.ru' in url:
print('.ru\n')
elif '.net' in url:
print('.net\n')
elif '.info' in url:
print('.info\n')
elif '.biz' in url:
print('.biz\n')
elif '.online' in url:
print('.online\n')
elif '.in' in url:
print('.in\n')
elif '.edu' in url:
print('.edu\n')
else:
print('Other low level domain!\n')
return dictionary
if name == 'main' : url = input ("Enter your URL:") parse URL(url)
#Sample URLS to copy
# url='https://www.facebook.com/photo.php?fbid=2068026323275211&set=a.269104153167446&type=3&theater'
# url='http://www.blog.google.uk:1000/path/to/myfile.html?key1=value1&key2=value2#InTheDocument'
# url='https://www.overleaf.com/9565720ckjijuhzpbccsd#/347876331/'
언급URL : https://stackoverflow.com/questions/21584545/url-query-parameters-to-dict-python
'programing' 카테고리의 다른 글
예외를 발생시키는 람다 식 정의 (0) | 2023.07.19 |
---|---|
Spring MockMvc 웹 응용 프로그램 컨텍스트에 모의 주입 (0) | 2023.07.19 |
날짜/시간별 판다 데이터 프레임 그룹 (0) | 2023.07.19 |
내측 조인 대 내측 조인(선택. 시작) (0) | 2023.07.19 |
파이썬은 무슨 뜻입니까? (0) | 2023.07.19 |