如何在python中保存文件,因为url包含“?”字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中保存文件,因为url包含“?”字符?相关的知识,希望对你有一定的参考价值。

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

我得到了这个回报:

Traceback (most recent call last):
  File "C:Python3lib	hreading.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:Python3lib	hreading.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)

以上是关于如何在python中保存文件,因为url包含“?”字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中规范化包含列表(应保存为列表)的 json 文件熊猫?

如何保存或下载我在请求中获得的图像——Python

将包含许多嵌套对象的JSON文件保存到列表中

如何在python中保存多个xml文件

python web抓取并将数据写入csv

[转] 三种Python下载url并保存文件的代码