【问题标题】:Downloading a protected file using python urllib使用 python urllib 下载受保护的文件
【发布时间】:2026-01-29 18:45:01
【问题描述】:

我正在尝试下载位于此处 http://elwatan.com/pdf/telecharger.php?dir=JOURNAL&file=20120524.pdf 的 PDF 文件,但是,此 pdf 文件需要在下载之前登录。我能够登录,但是服务器将我重定向到主页http://elwatan.com,当我再次尝试获取pdf的url时,我无法下载它,因为我似乎没有登录!我认为我需要使用 cookie,对吗?

如果是,请您解释一下如何操作,因为我以前从未使用过它们。 ?

谢谢:)

【问题讨论】:

标签: python download urllib


【解决方案1】:

mechanize 库对于这种情况非常有用。它模拟浏览器,包括填写表单(如登录表单)和保持状态(如 cookie)。有了它,您可以登录该站点,然后导航到 pdf 文件。您将使用类似于以下代码的内容:

br = mechanize.Browser()
br.open(login_url)
#code to log in with br
data = br.open(pdf_url).get_data()

然后您必须将数据解析为 pdf 文件,然后您可以对它做任何您需要的事情。

【讨论】:

  • 我之前没有使用过 mechanize 处理 pdf,所以我不太确定,但数据应该是 pdf。您可能必须使用其他一些 pdf 库才能真正从中获得任何有用的东西。
【解决方案2】:

使用该网络应用程序时,会为您生成一个“会话”。会话详细信息存储在您的客户端中的 cookie 中。您的客户端会随每个 HTTP 请求发送 cookie 内容。通过这样做,Web 应用程序知道您的 HTTP 请求对应于同一个会话。最初,您只是该会话中的未知用户。登录后,Web 应用程序知道该会话中的请求来自授权用户。

你有两个选择:

  • 通过浏览器登录,制作 cookie 并使用 Python 在后续请求中伪造浏览器
  • 用 Python 做所有事情(从初始请求、登录、文档检索开始)

两者都可能是大量工作(尤其是如果您不熟悉这些东西),因为您必须根据 Web 应用程序的具体情况调整代码。像 mechanize 这样的库(正如其他人已经提到的)可以节省一些工作。

【讨论】: