从Filetype字段下载文件?

时间:2013-01-07 11:58:15

标签: python selenium python-2.7 beautifulsoup

我正在寻找一种从不同页面下载文件并将其存储在本地计算机中的特定文件夹下的方法。我使用的是Python 2.7

请参阅以下字段:

Filetypefield

修改

这里是html内容:

<input type="hidden" name="supplier.orgProfiles(1152444).location.locationPurposes().extendedAttributes(Upload_RFI_Form).value.filename" value="Screenshot.docx">

<a style="display:inline; position:relative;" href="

                                      /aems/file/filegetrevision.do?fileEntityId=8120070&cs=LU31NT9us5P9Pvkb1BrtdwaCrEraskiCJcY6E2ucP5s.xyz">
                                Screenshot.docx
                             </a>

我刚试过的一个Possiblity: ,如果添加说https://xyz.test.com并构建如下所示的网址,则使用html内容

https://xyz.test.com/aems/file/filegetrevision.do?fileEntityId=8120070&cs=LU31NT9us5P9Pvkb1BrtdwaCrEraskiCJcY6E2ucP5s.xyz

将该网址放到浏览器上并点击Enter,让我有机会按照提到的屏幕截图下载该文件。但是现在我们可以找到这样的aems/file/filegetrevision.do?fileEntityId=8120070&cs=LU31NT9us5P9Pvkb1BrtdwaCrEraskiCJcY6E2ucP5s.xyz值,它存在多少?

CODE 我到现在为止所尝试的

只有痛苦如何下载该文件。使用脚本构造URL:

for a in soup.find_all('a', {"style": "display:inline; position:relative;"}, href=True):
    href = a['href'].strip()
    href = "https://xyz.test.com/" + href
print(href)

请在这里帮助我!

如果您需要我的更多信息,请告诉我,我很乐意与您分享这些信息。

提前致谢!

2 个答案:

答案 0 :(得分:2)

正如@JohnZwinck建议您可以使用urllib.urlretrieve并使用re模块创建给定页面上的链接列表并下载每个文件。以下是一个例子。

#!/usr/bin/python

"""
This script would scrape and download files using the anchor links.
"""


#Imports

import os, re, sys
import urllib, urllib2

#Config
base_url = "http://www.google.com/"
destination_directory = "downloads"


def _usage():
    """
    This method simply prints out the Usage information.
    """

    print "USAGE: %s <url>" %sys.argv[0]


def _create_url_list(url):
    """
    This method would create a list of downloads, using the anchor links
    found on the URL passed.
    """

    raw_data = urllib2.urlopen(url).read()
    raw_list = re.findall('<a style="display:inline; position:relative;" href="(.+?)"', raw_data)
    url_list = [base_url + x for x in raw_list]
    return url_list


def _get_file_name(url):
    """
    This method will return the filename extracted from a passed URL
    """

    parts = url.split('/')
    return parts[len(parts) - 1]


def _download_file(url, filename):
    """
    Given a URL and a filename, this method will save a file locally to the»
    destination_directory path.
    """
    if not os.path.exists(destination_directory):
        print 'Directory [%s] does not exist, Creating directory...' % destination_directory
        os.makedirs(destination_directory)
    try:
        urllib.urlretrieve(url, os.path.join(destination_directory, filename))
        print 'Downloading File [%s]' % (filename)
    except:
        print 'Error Downloading File [%s]' % (filename)


def _download_all(main_url):
    """
    Given a URL list, this method will download each file in the destination
    directory.
    """

    url_list = _create_url_list(main_url)
    for url in url_list:
        _download_file(url, _get_file_name(url))


def main(argv):
    """
    This is the script's launcher method.
    """

    if len(argv) != 1:
        _usage()
        sys.exit(1)
    _download_all(sys.argv[1])
    print 'Finished Downloading.'


if __name__ == '__main__':
    main(sys.argv[1:])

您可以根据需要更改base_urldestination_directory,并将脚本另存为download.py。然后从终端使用它像

python download.py http://www.example.com/?page=1

答案 1 :(得分:1)

我们无法知道您从第一张图片获得了哪些服务,但我们会假设它位于某种类型的网站上 - 可能是您公司内部的一个网站。

您可以尝试的最简单的方法是使用urllib.urlretrieve根据其URL“获取”文件。如果您可以右键单击该页面上的链接,复制URL并将其粘贴到您的代码中,则可以执行此操作。

但是,这可能不起作用,例如,如果在访问该页面之前需要复杂的身份验证。您可能需要编写实际执行登录的Python代码(就像用户控制它,键入密码一样)。如果你走得那么远,你应该把它作为一个单独的问题发布。