2014-11-05 76 views
-3

我有一項任務是在本地下載每天從下載站點下載的McAfee病毒定義文件。文件的名稱每天都在變化。下載站點的路徑是「http://download.nai.com/products/licensed/superdat/english/intel/7612xdat.exe」 此ID 7612將改變每一天不同的東西,因此我不能硬編碼它。我必須找到一種方法,在提供參數或其他名稱之前列出文件名。 在stackoverflow站點上,我發現某人的腳本對我有用,如果有人可以建議如何處理更改的文件名。 這裏是我將要使用的腳本:每次文件名更改時從Web下載文件

def download(url): 
    """Copy the contents of a file from a given URL 
    to a local file. 
    """ 
    import urllib 
    webFile = urllib.urlopen(url) 
    localFile = open(url.split('/')[-1], 'w') 
    localFile.write(webFile.read()) 
    webFile.close() 
    localFile.close() 

if __name__ == '__main__': 
    import sys 
    if len(sys.argv) == 2: 
     try: 
      download(sys.argv[1]) 
     except IOError: 
      print 'Filename not found.' 
    else: 
     import os 
     print 'usage: %s http://server.com/path/to/filename' % os.path.basename(sys.argv[0]) 

有人能告訴我嗎? 在此先感謝

+0

是不是文件名順序? – 2014-11-05 16:19:43

+3

只是抓取這個頁面http://download.nai.com/products/licensed/superdat/english/intel/,尋找exe擴展並下載它 – Hackaholic 2014-11-05 16:20:32

+0

我不知道文件名是否連續。 -Hackaholic,我喜歡抓取頁面的想法,我可以找到最新的並下載。問題是我不知道如何使用python列出該頁面的內容,你能建議嗎?謝謝 – susja 2014-11-05 16:39:33

回答

0

它是一個兩步過程。首先刮索引頁尋找文件。二,抓最新下載

import urllib 
import lxml.html 
import os 
import shutil 

# index page 
pattern_files_url = "http://download.nai.com/products/licensed/superdat/english/intel" 
# relative url references based here 
pattern_files_base = '/'.join(pattern_files_url.split('/')[:-1]) 

# scrape the index page for latest file list 
doc = lxml.html.parse(pattern_files_url) 
pattern_files = [ref for ref in doc.xpath("//a/@href") if ref.endswith('xdat.exe')] 
if pattern_files: 
    pattern_files.sort() 
    newest = pattern_files[-1] 
    local_name = newest.split('/')[-1] 
    # grab it if we don't already have it 
    if not os.path.exists(local_name): 
     url = pattern_files_base + '/' + newest 
     print("downloading %s to %s" % (url, local_name)) 
     remote = urllib.urlopen(url) 
     print dir(remote) 
     with open(local_name, 'w') as local: 
      shutil.copyfileobj(remote, local, length=65536) 
+0

-tdelany,我非常感謝您的幫助。它對我來說非常合適。 謝謝 – susja 2014-11-05 18:32:26