【问题标题】:Download images and pdf using python (robobrowser)使用 python (robobrowser) 下载图像和 pdf
【发布时间】:2015-02-17 10:42:51
【问题描述】:

我正在使用 robobrowser 登录受密码保护的网站。我能够下载 html 代码并对其进行编辑。但是,当我使用以下方法时:

br = RoboBrowser(history=True)
url = 'https://dummywebsite.html/dummy.pdf'
br.open(url)
pdf_file = '/localdir/local.pdf'
with open(pdf_file, 'wb') as output:
    output.write("%s" % (br.parsed))

但是,输出不是有效的 pdf 文件。当我尝试下载图像时也会发生同样的情况。我浏览了文档,但还没有找到任何东西。对此的替代方案似乎是机械化的。但是,没有 python 3 支持。

如果有帮助或指点,我将不胜感激。此外,如果 robobrowser 无法处理此问题,任何其他替代方案都会有很大帮助。

【问题讨论】:

  • 您可以使用 SimpleAuth 登录吗? http://login:password@url?如果是这样,您何时可以使用urllib2 模块。
  • 我认为 br.parsed 可能不是你想要的,因为文档说这会返回 "... parse[d] response content" 。也许 RoboBrowser 支持读取原始 HTTP 响应正文的方法,或者如果您可以处理身份验证,您可能会更轻松地使用 urllib2

标签: python robobrowser


【解决方案1】:

您必须将返回页面(PDF)的全部内容放入文件中。 这段代码应该可以工作:

br = RoboBrowser(history=True)
url = 'https://dummywebsite.html/dummy.pdf'
br.open(url)
pdf_file = '/localdir/local.pdf'

content = br.response.content

with open(pdf_file, "wb") as output:
  output.write(content)

【讨论】:

    【解决方案2】:

    您可以尝试使用 RoboBrowser 也提供的 requests.session 对象:

    url = "https://dummywebsite.html/dummy.pdf"
    pdf_file_path = "/localdir/local.pdf"
    
    browser = RoboBrowser(history=True)
    # do the login (e.g. via a login form)
    request = browser.session.get(url, stream=True)
    
    with open(pdf_file_path, "wb") as pdf_file:
        pdf_file.write(request.content)
    

    此方法还允许您访问仅在您登录后才可用的文件(此信息通常存储在 HTTP 会话中)。

    【讨论】:

    • 不确定stream=True 选项是否在那里工作(如果文件很小,则无效,如果文件很大,则代码可能会失败)。
    猜你喜欢
    • 2018-09-12
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多