python - 如何获取wget下载的文件的文件名

标签 python python-2.7 wget

我正在使用 os.system('wget '+ link) 从网站检索文件。下载后,我想根据源链接进一步处理这些文件。

大部分链接都是这种形式 http://example.com/.../filename.zip .
在这种情况下,文件只是作为 filename.zip 下载。我可以使用 basename 和 RegExp [^/]+$ 从链接中提取。

但问题是

形式的链接
http://http://www.ez-robot.com
http://www.worldscientific.com/
http://www.fairweld.com

这些链接被下载为 index.htmlindex.html.1index.html.2 等。
在这里,我无法区分哪个 index 文件属于哪个网站。我可以做到这一点的一种方法是查看链接传递给 wget 的顺序。

我想要一些通用方法来获取计算机中下载文件的“真实”文件名。当 wget 完成执行时,它会在终端上显示一个 Saving to: 标签,后跟“真实”文件名。我想将该文件名存储在一个字符串中。

是否存在任何直接/更简单的方法来获取文件名?我正在使用 Python。

$ wget http://www.fairweld.com
--2015-04-11 18:51:48--  http://www.fairweld.com/
Connecting to 202.142.81.24:3124... connected.
Proxy request sent, awaiting response... 200 OK
Length: 39979 (39K) [text/html]
Saving to: ‘index.html.4

最佳答案

您遇到的问题是因为文件名已经存在。我建议将每个"file"下载到一个新文件夹(即域名)以防止重复。

$ wget --directory-prefix=$DOMAIN $URL

这将保留原始文件名,如数据标题中指定的那样。

还有一个提示,您正在使用 os.system('wget '+ link) 这可能非常不安全,因为您没有在此处清理您的输入。输入可能会受到注入(inject),这会使您的系统运行不需要的命令。在 Bobby Tables 上阅读更多内容.

关于python - 如何获取wget下载的文件的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578439/

相关文章:

python - 类型错误 : argument of type 'NoneType' is not iterable with mysql. 连接器

python - 尝试调用 pyusb 中的后端模块时出错。 "AttributeError: ' 模块的对象没有属性 'backend' "

wget - 使用不接受特殊字符的 axel 下载器下载带有用户名和密码的文件,例如; : < >

python - 如何确保操作系统命令在 Python 中同步运行?

python - 获取与numpy中的条件匹配的行的行号

python - 使用值列表从 Pandas 数据框中选择行

Python:如何获取 URL 的内容类型?

Python re : why does [, -_] 匹配 "="?

powershell - 如何使用用户名和密码在 PowerShell 控制台中使用 wget

windows - wget 没有使用基于环境变量的代理设置