如何使用Python从URL中删除查询字符串

use*_*611 14 python cgi http urlparse

例:

http://example.com/?a=text&q2=text2&q3=text3&q2=text4
Run Code Online (Sandbox Code Playgroud)

删除" q2 "后,它将返回:

http://example.com/?q=text&q3=text3
Run Code Online (Sandbox Code Playgroud)

在这种情况下,有多个" q2 ",所有都被删除.

laz*_*zy1 60

import sys

if sys.version_info.major == 3:
    from urllib.parse import urlencode, urlparse, urlunparse, parse_qs
else:
    from urllib import urlencode
    from urlparse import urlparse, urlunparse, parse_qs

url = 'http://example.com/?a=text&q2=text2&q3=text3&q2=text4&b#q2=keep_fragment'
u = urlparse(url)
query = parse_qs(u.query, keep_blank_values=True)
query.pop('q2', None)
u = u._replace(query=urlencode(query, True))
print(urlunparse(u))
Run Code Online (Sandbox Code Playgroud)

  • Python 3 imports: `from urllib.parse import urlencode, urlparse, urlunparse, parse_qs` (6认同)
  • 最佳答案.另外,可以使用urlparse对象的[geturl](https://docs.python.org/2/library/urlparse.html#urlparse.ParseResult.geturl)方法代替urlunparse`print(u.geturl()) ` (3认同)
  • @kurifu OP 只想删除一个参数,而不是整个查询。 (2认同)
  • 访问类的受保护成员 _replace.... 我们如何避免此警告消息? (2认同)

png*_*png 21

import urlparse

url = 'http://example.com/?a=text&q2=text2&q3=text3&q2=text4'
urlparse.urljoin(url, urlparse.urlparse(url).path)
Run Code Online (Sandbox Code Playgroud)

  • 我比流行的答案更喜欢这种方法,因为它不调用任何内部 API,但它也会消除 URL 片段,而流行的答案会保留它们。它也没有解决 OP 的确切问题(它删除 _all_ 查询字符串参数),但它解决了我的 :) (4认同)

May*_*wal 11

使用python的url操作库furl:

import furl
f = furl.furl("http://example.com/?a=text&q2=text2&q3=text3&q2=text4")
f.remove(['q2'])
print(f.url)
Run Code Online (Sandbox Code Playgroud)

  • 称其为“python 的 url 操作库”,听起来像是包含在标准库中,但事实并非如此。 (8认同)

Mik*_*ton 8

我下面的答案是最好的方法。


Cla*_*ius 5

这不只是在字符上分割字符串的问题吗?

>>> url = http://example.com/?a=text&q2=text2&q3=text3&q2=text4
>>> url = url.split('?')[0]
'http://example.com/'
Run Code Online (Sandbox Code Playgroud)