我如何在 python 中保存文件,因为 url 包含“?”特点?

How do I save a file in python since the url contain "?" caracter?

我还在学习。也许这个问题对某些人来说非常简单易行,但我正在努力解决这个小问题。我是 运行 一个多线程和队列,用于从站点下载 .HTML 文件。行。一切都很好,除了我尝试保存文件时。一旦 URL 包含特殊字符(这个 -> “?”),我将无法保存文件...保存文件时注意允许使用特殊字符 (/:?*< >), 对吧??

网址就是这个。当我用我的用户名和密码加载它时,它是一个 html 文件。

if __name__ == "__main__":
    urls = ["https://supercarros.com.br/Carros?codigoUC=17342856", "https://supercarros.com.br/Carros?codigoUC=3707466"]
    main(urls)

当我尝试使用这部分代码进行保存时:

def download_file(self, url): 
    handle = requests.get(url, headers=headers)
    fname = os.path.basename(url + ".htm")
        with open(fname, "wb") as f:
            for chunk in handle.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
            del handle

我明白了 return:

Traceback (most recent call last):
  File "C:\Python3\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "f.py", line 24, in run
    self.download_file(url)
  File "f.py", line 33, in download_file
    with open(fname, "wb") as f:
OSError: [Errno 22] Invalid argument: 'Carros?codigoUC=17342856.htm'

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Python3\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "f.py", line 24, in run
    self.download_file(url)
  File "f.py", line 33, in download_file
    with open(fname, "wb") as f:
OSError: [Errno 22] Invalid argument: 'Carros?codigoUC=3707466.htm'

当然...它不会允许我。 我的问题是..我该如何解决这个小问题??我应该怎么做才能在没有“?”的情况下保存文件?字符,但保留最后一部分 "codigoUC=3707466.htm"

感谢所有帮助。 提前谢谢你

如果您只想从名称中删除 ? 字符,您可以这样做:

with open(fname.replace('?', ''), "wb") as f:

文件名最终会变成 CarroscodigoUC=17342856.htm

如果要删除所有特殊字符,可以使用正则表达式:

import re
fname = re.sub(r'[/:?*<>]', r'', fname)