【问题标题】:Capturing wget errors with python使用 python 捕获 wget 错误
【发布时间】:2014-12-04 18:44:38
【问题描述】:

我有一个脚本,它使用 python 和 wget 下载网站,然后对文件执行一些任务。我使用os.system("wget -m -w 2 -P " directory) 调用wget,递归下载域中的每个页面。这工作正常,但现在有必要监视 wget 是否在跟随链接下载文件时出现错误(想想 404 错误试图访问页面)。

这不是获取退出代码的问题,而是查看 wget 提供的每个“块”输出。

有没有一种简单的方法可以使用 Python 浏览 wget 输出,而无需将其重定向到文件,然后在文件中搜索可识别的文本字符串?

【问题讨论】:

  • 直接在 Python 中下载文件,例如使用 requests 模块。这样你就可以轻松处理错误了。
  • 使用requests 模块而不是wget。你会为自己省去 的头痛。
  • @wenzul & Lukas Graf :更仔细地阅读问题并最终阅读 wget 的手册页(特别是“-m”选项的含义)。
  • @LukasGraf 我研究了其中的一些,但递归爬取域并不像 Wget 那样简单。
  • @brunodesthuilliers 是的,明白了。但他也可以在他的帖子中写下……在快速和谷歌之后,似乎没有简单的可能性。我会为 url 编写一个小解析器并使用grequests 并行下载。

标签: python linux debian wget


【解决方案1】:

如果您只想要退出代码,那么这就是 os.system() 返回的内容(警告:这是标准的 linux 进程退出代码,因此 0 表示“无错误”以及其他任何错误)。

如果您想了解更多详细信息,则必须使用子进程模块 (https://docs.python.org/2/library/subprocess.html#module-subprocess) 将子进程的标准错误传送回您的 Python 代码。或者您可以使用 Python 而不是 wget - 有很多基于 Python 的爬虫可用。

【讨论】:

  • @Butters 这个答案完全满足了这个问题。现在您可以自己调查链接并付出自己的努力。
  • 附带说明:无论如何,我不会依赖 wget 的错误消息来处理任何严重的事情 - 除非我只想逐字打印出错误消息。
  • 好的,可以关注this
【解决方案2】:

据我所知,os.system 返回命令的退出代码。

所以,以下应该可以工作:

code = os.system("wget -m -w 2 -P {}".format(directory)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多