Python 은 어떻게 URL 변환 을 실현 합 니까?
문제.
URL 의 중국어 이름 은 통일 자원 포 지 셔 닝 문자 입 니 다.바로 우리 가 흔히 말 하 는 사이트 입 니 다.알고리즘 을 설계 하여 URL 을 5 부분 으로 바 꿉 니 다.각각 schema,netloc,path,query 입 니 다.params、fragment。
<scheme>://<netloc>/<path>?<query_params>#<fragment>
한 그림 이 천 마디 말 보다 낫다.응용 장면
실제 응용 장면 에서 일부 취 합 사 이 트 는 URL 에서 netloc 를 추출 합 니 다.
분석 하 다.
여기 에는 특별히 복잡 한 알고리즘 이 없습니다.각 부분 에 특별한 문자 가 있 기 때문에 Python 의 문자열 조작 과 정규 표현 식 을 능숙 하 게 사용 하면 간단 합 니 다.
지식 점
문자열 의 일반적인 방법 split,find,join,lower,절편 의 사용,re 모듈 아래 의 일반적인 방법.또한 namedtuple 을 사용 하여 간단 한 종 류 를 정의 하 는 방법 도 있 습 니 다.
이루어지다
첫 번 째 방법 은 문자열 을 사용 하여 제공 하 는 방법 으로 관건 적 인 문자 에 따라 구분 하 는 것 이다.전체적인 사 고 는 문자열 의 절편 기능 을 이용 하여 끊임없이 절 분 된 것 으로 코드 가 약간 복잡 하 다.
URL = namedtuple("URL", ["schema", "netloc", "path", "params", "fragment"])
def url_parse1(url):
assert url.startswith("http")
#
schema = netloc = params = fragment = path = None
# :// url, shema
i = url.find('://')
if i > 0:
schema = url[:i]
url = url[i + 3:]
# netloc
for c in "/?#": #
a = url.find(c)
if a > 0: # , , netloc,
netloc, url = url[0:a], url[a:]
break
else:
netloc, url = url, '' # url ,
# path
for c in "?#":
a = url.find(c)
if a > 0:
path, url = url[0:a], url[a:]
break
else:
path, url = url or None, ''
if "#" in url:
url, fragment = url.split("#", 1)
if '?' in url:
url, params = url.split('?', 1)
return URL(schema=schema, netloc=netloc, path=path, params=_params_parse(params), fragment=fragment)
def _params_parse(params):
if not params:
return None
pairs = [s for s in params.split('&')]
param_dict = dict()
for pair in pairs:
k, v = pair.split('=', 1)
param_dict[k] = v
return param_dict
두 번 째 방식 은 정규 표현 식 으로 정규 표현 식 을 쓰 는 능력 을 시험 하 는 것 이다.
def url_parse2(url):
rex = r'^(http[s]?):\/\/([^\/\s]+)([\/\w\-\.]+[^#?\s]*)?(\?([^#]*))?(#(.*))?$'
schema = netloc = params = fragment = path = ''
pattern = re.compile(rex)
match = pattern.match(url)
if match:
schema = match.group(1)
netloc = match.group(2)
path = match.group(3)
params = match.group(5)
fragment = match.group(7)
return URL(schema=schema, netloc=netloc, path=path, params=_params_parse(params), fragment=fragment)
정규 표현 식 의 그룹 기능 을 통 해 각 부분 을 추출 하고 정규 표현 식 에 대해 두 개의 자원 을 추천 합 니 다.온라인 디 버 깅 정규 표현 식
4.567915.이것 은 Python 의 정규 표현 식 을 비교적 완전 하 게 소개 하 는 글 입 니 다.만약 에 안의 모든 말 을 읽 고 실천 할 수 있다 면 위 와 같은 표현 식 을 쓸 수 있 을 것 입 니 다.
물론 urlparse 모듈 에 있 는 기 존 방식 으로 도 직접 실현 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.