【问题标题】:How to download a file pushed to a browser using python?如何下载使用python推送到浏览器的文件?
【发布时间】:2013-04-11 17:17:04
【问题描述】:

我想使用 python 下载一个 zip 文件。

使用这种类型的网址, http://server.com/file.zip 通过使用 urllib2.urlopen 并将其写入本地文件,这非常简单。

但就我而言,我有这种类型的网址: http://server.com/customer/somedata/download?id=121&m=zip, 表单验证后启动下载。

准确地说,在我的情况下,我想将它部署在 heroku 上,所以我不能使用用 C++ 构建的 spynner。此下载是在使用 scrapy 进行抓取后启动的。

从浏览器下载运行良好,我得到了一个带有其名称的好 zip 文件。使用 python 我只得到 html 和 header 数据...

有没有办法从python中的这种类型的url中获取文件?

【问题讨论】:

  • 响应是什么样的?它是一个 HTML 页面还是你所追求的实际文件,就像一个 Scrapy Response 对象?
  • 这不是重复的,在这里我无法像在 pdf 文件中那样获取 .body。
  • 我得到一个 html 页面,是的
  • 提供一个真实的链接,以便我检查它的源代码。

标签: python download scrapy


【解决方案1】:

本网站提供 JavaScript,然后调用下载。 您别无选择,只能:a)在模拟的浏览器环境中评估 JavaScript 或 b)手动解析 JS 的功能,然后在 python 中重新实现。例如提取 URL 和下载密钥的字符串,可能调用 AJAX 请求,最后下载文件

对于网页相关的自动化,我一般推荐Mechanize,但它也不能处理JavaScript,所以我想如果你想选择方案b),你可以坚持使用Scrapy。

【讨论】:

  • Mechanize 不支持 JavaScript。
  • 我知道,但可能需要 cookie
  • Scrapy 负责 cookie、会话、重定向等,所以我认为 Mechanize 不会添加任何额外的功能。
【解决方案2】:

当您在浏览器中进行下载时,打开开发者控制台的网络选项卡并记录什么 HTTP 方法(可能是 POST)、POST 参数、cookie 以及作为验证一部分的所有其他内容;然后使用库来复制它。

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2016-07-08
    • 2021-11-22
    相关资源
    最近更新 更多