首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何获取wget下载的文件的文件名

如何获取wget下载的文件的文件名
EN

Stack Overflow用户
提问于 2015-04-11 13:31:04
回答 2查看 3K关注 0票数 5

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

大多数链接都是这种形式的htttp://example.com/.../filename.zip

在这种情况下,文件被简单地下载为filename.zip。我可以使用basename和RegExp [^/]+$从链接中提取这一点。

但问题是表格的链接

代码语言:javascript
代码运行次数:0
运行
复制
http://http://www.ez-robot.com
http://www.worldscientific.com/
http://www.fairweld.com

这些链接被下载为index.htmlindex.html.1index.html.2 ans等。

在这里,我无法区分哪个index文件属于哪个网站。我可以这样做的一种方法是查看链接被传递到wget的顺序。

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

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

代码语言:javascript
代码运行次数:0
运行
复制
$ 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-11 14:37:30

使用os.path.basename并获取名称取决于url的结束方式,您还可以使用请求下载html:

代码语言:javascript
代码运行次数:0
运行
复制
links = ["http://www.ez-robot.com",
"http://www.worldscientific.com/",
"http://www.fairweld.com"]


import urlparse
import requests
import os
for link in links:
    r = requests.get(link)
    if link.rsrip("/").endswith(".com"):
        name = os.path.basename(link)
    else:
        name = urlparse.urlsplit(link.path.split("/")[-1])
    with open("{}.html".format(name),"w") as f:
        f.write(r.content)
票数 2
EN

Stack Overflow用户

发布于 2015-04-11 13:53:14

发生问题的原因是文件名已经存在。我建议下载每一个“文件”到一个新的文件夹(即域名),以防止重复。

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

这将保留数据头中指定的原始文件名。

还有一个提示,您使用的是os.system('wget '+ link),它可能非常不安全,因为您在这里没有净化您的输入。输入可能会受到注入的影响,这会使您的系统运行不必要的命令。阅读有关鲍比桌的更多信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29578439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档