urllib.Parse를 사용하여 URL의 검색 문자열을 동적으로 재구성

8465 단어 Python

하고 싶은 일

https://github.com/search?q=rails&type=Repositories이러한 URL을 기반으로https://github.com/search?q=numpy&type=Repositories&l=C이러한 URL을 생성하고 싶습니다.구체적으로 조회 파라미터의 값q이 바뀌었고 파라미터l=C가 추가되었다.

메서드


이루어지다

import urllib.parse


def update_query_parameters(url, query_parameters):
  result = urllib.parse.urlparse(url)
  params = urllib.parse.parse_qs(result.query)
  params.update(query_parameters)
  new_query = urllib.parse.urlencode(params, doseq=True)
  result = result._replace(query=new_query)

  return urllib.parse.urlunparse(result)
>>> url = 'https://github.com/search?q=rails&type=Repositories'
>>> update_query_parameters(url, {'q': 'numpy', 'l': 'C' })
'https://github.com/search?q=numpy&type=Repositories&l=C'

디테일

>>> import urllib.parse
>>> result = urllib.parse.urlparse('https://github.com/search?q=rails&type=Repositories')
>>> result
ParseResult(scheme='https', netloc='github.com', path='/search', params='', query='q=rails&type=Repositories', fragment='')
>>> params = urllib.parse.parse_qs(result.query)
>>> params
{'q': ['rails'], 'type': ['Repositories']}
>>> params.update({'q': 'numpy', 'l': 'C' })
>>> params
{'q': 'numpy', 'type': ['Repositories'], 'l': 'C'}
>>> new_query = urllib.parse.urlencode(params, doseq=True)
>>> new_query
'q=numpy&type=Repositories&l=C'
>>> # ParseResult オブジェクトでは somenamedtuple._replace(**kwargs) が使える。
... result = result._replace(query=new_query)
>>> result
ParseResult(scheme='https', netloc='github.com', path='/search', params='', query='q=numpy&type=Repositories&l=C', fragment='')
>>> urllib.parse.urlunparse(result)
'https://github.com/search?q=numpy&type=Repositories&l=C'
응, 좀 복잡한데

참고 자료

  • 완전한 문서 한 편.urllib.parse-URL을 구성 요소로 분석
  • 좋은 웹페이지 즐겨찾기