【问题标题】:How to download files from a web based file server with Python Mechanize如何使用 Python Mechanize 从基于 Web 的文件服务器下载文件
【发布时间】:2011-07-12 10:30:20
【问题描述】:

我在私有 ftp 文件服务器上有一系列文件,我尝试使用 mechanize 下载这些文件。

机械化链接对象具有结构

Link(base_url='http://myfileserver.com/cgi-bin/index.cgi', url='index.cgi?page=download&file=%2Fhome%2Fjmyfileserver%2Fpublic_html%2Fuser_data%2Fmycompany%2F.ftpquota', text='Download [IMG]', tag='a', attrs=[('href', 'index.cgi?page=download&file=%2Fhome%2Fjmyfileserver%2Fpublic_html%2Fuser_data%2Fmycompany%2F.ftpquota'), ('class', 'ar')])

这基本上对应于文件图标链接到文件的链接

我是机械化新手。
但是如何下载链接文件可以从

urlparse.urljoin(base_url , url)

两者结合得到:

http://myfileserver.com/cgi-bin/index.cgi?page=download&file=%2Fhome%2Fjmyfileserver%2Fpublic_html%2Fuser_data%2Fmycompany%2F.ftpquota

我不知道如何继续。

我的原始代码

import mechanize
import subprocess
import urlparse
br = mechanize.Browser()
br.open("http://myfileserver.com/cgi-bin/index.cgi")
br.select_form(nr=0)
br['login'] = "mylogin"
br['password'] = "mypassword"
br.submit()
#print dir(br)
myfiles = []
for alink in br.links():
    print alink
    myfiles.append(alink)

def downloadlink(l):
    print " Trying to download", l.url.split("%2F")[-1]
    f=open(l.url.split("%2F")[-1],"w") 
    myurl = urlparse.urljoin(l.base_url,l.url)
    print myurl
    # Dont know how to proceed



for linkobj in myfiles:

    if "sca" in linkobj.url:
        #br.follow_link(text='[IMG]', nr=0)
        downloadlink(linkobj)

【问题讨论】:

    标签: python download mechanize


    【解决方案1】:

    你可以试试:

    for index, linkobj in enumerate(myfiles):
        if "sca" in linkobj.url:
            resp = br.follow_link(text='Download [IMG]',nr=0)
            content = resp.read()
            with open('output%s.txt' % index, 'w') as fo:
               fo.write(content)
    

    【讨论】:

    • 当我尝试这个时,写入我的目录的文件基本上是登录表单的 html 代码。所以它没有这些链接喜欢的文件。
    • @har 那是因为text='[IMG]' 可能不起作用。您应该指向正确的下载链接(我猜不出来),它应该可以工作
    • 太棒了太棒了。那行得通。我实际上是把 text='[IMG]' 让它工作。一旦我将其更改为resp = br.follow_link(text='Download [IMG]',nr=0),代码就可以完美运行。
    【解决方案2】:

    如果你有一个 ftp 服务器,mechanize 不是下载文件的方式,你应该看看ftplib。这个tutorial 应该会让你上路。

    【讨论】:

    • 它不是 ftp 服务器。但是一个 cgi 前端意味着我想要自动化的基于 http 的手动文件下载。尤其是有几十个文件的时候:一个一个点击保存文件作为链接会很痛苦
    猜你喜欢
    • 2016-10-22
    • 2011-06-04
    • 2015-04-04
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多