我如何在 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)
我还在学习。也许这个问题对某些人来说非常简单易行,但我正在努力解决这个小问题。我是 运行 一个多线程和队列,用于从站点下载 .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)