Python 은 어떻게 URL 변환 을 실현 합 니까?

3402 단어 python바꾸다URL
하나의 알고리즘 을 설계 하여 URL 을 5 부분 으로 변환 합 니 다.각각 schema,netloc,path,query 입 니 다.params、fragment。
문제.
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 모듈 에 있 는 기 존 방식 으로 도 직접 실현 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기