2013-01-07 40 views
-2

我正在尋找一種方法來從不同頁面下載文件,並將它們存儲在本地計算機中的特定文件夾下。我使用Python 2.7從Filetype字段下載文件?

見下面的字段:

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> 

一個方法可行我只是想:與HTML的內容,如果加說https://xyz.test.com和構造URL類似如下

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

,並將該網址到瀏覽器和命中Enter讓我有機會來下載文件提到的截圖。但是現在我們能找到這樣的數值嗎?

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) 

請幫我這裏!

讓我知道你們是否需要我提供更多信息,我很樂意將這些信息告訴你們。

在此先感謝!

+0

你是什麼意思的不同頁面?這些頁面是從哪裏渲染的? – Amyth

+1

@Amyth我正在使用第三方「URL」。我正在使用'selenium'在網頁中瀏覽頁面,搜索任何可下載的文件,如果找到,然後將它們下載到特定的文件夾中。我有這樣的10000個文件下載。 –

+0

你能發佈完整的HTML嗎? – Amyth

回答

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 
+0

非常感謝你,先生...我已經看過你的4 C ...對我來說唯一的'C'就是cgrt。 :)爲什麼你使用'urllib','urllib2'呢? –

+1

因爲懇求http://docs.python.org/2/library/urllib.html,urllib.urlopen已經被python 3中的urllib2.urlopen所取代。所以,爲了確保腳本也可以在p3中運行。 – Amyth

+1

'+ 1'照顧我的困惑。 '德里'幫助'孟買':) :) –

1

我們無法知道您從哪個服務中獲得了第一張圖片,但我們會假設它位於某種網站上 - 可能是您公司的內部網站。

您可以嘗試的最簡單的事情是使用urllib.urlretrieve根據其URL獲取文件。如果您可以右鍵單擊該頁面上的鏈接,複製該URL並將其粘貼到代碼中,則可以執行此操作。

但是,這可能無法正常工作,例如,如果在訪問該頁面之前需要複雜的身份驗證。您可能需要編寫實際進行登錄的Python代碼(就像用戶正在控制它,輸入密碼一樣)。如果你有這麼多,你應該把它作爲一個單獨的問題發佈。

+0

是的我可以使用'Selenium web-driver'登錄到頁面。只有卡住是如何提示這樣的句柄並下載這些文件。 –

+0

您不需要「使用」提示 - 這是人類使用瀏覽器的功能。你正在自動化這些東西,不應該使用提示符,我不會這麼想。也許你對Selenium WebDriver的使用實際上阻礙了你 - 使用urllib試試我的方法,看看是否更容易。如果沒有認證,那肯定應該是。 –

+1

'urllib.urlretrieve(url [,filename [,reporthook [,data]]])這裏我只能給出URL,但其餘值如何。因爲它們都是動態的。要從該頁面中存在的字段下載的文件。該頁面包含不同類型的字段以及此類文件類型字段。 –