A very basic python script that downloads a website’s contents (via FTP).
Versions:
1.0: Initial program
from ftplib import FTP
from datetime import date, datetime
import os.path
# Server IP
Server_Address = ""
# An array of bad files or directories
BadFiles = []
#Username for Server
user = ""
#Password is below
def swap_crypt(str1):
"""
this function will encrypt/decrypt a string
"""
# change string to a mutable list of characters
list1 = list(str1)
# iterate the list with step=2
for k in range(0, len(list1), 2):
if len(list1) > k + 1:
# do a swap of groups of 2 items each in the list
list1[k], list1[k+1] = list1[k+1], list1[k]
# change list back to a string
return ''.join(list1)
def handleDownload(block):
global f
f.write(block)
def RecurseDirectories(currdir, folder, files):
global f, BadFiles, backup_dir
returnArr = []
if currdir == "":
filepath = ""
else:
filepath = currdir + "/"
for x in folder:
try:
BadFiles.index(x)
print "Skipped ", x
except:
try:
if (ftp.size(filepath + x) >= 0):
print filepath + x + " ... ",
if not os.path.isdir(backup_dir + "/" + filepath):
os.makedirs(backup_dir + "/" +filepath)
f = open(backup_dir + "/" +filepath + x, "wb")
ftp.retrbinary('RETR ' + filepath + x, handleDownload)
f.close()
print "Complete"
returnArr.append(filepath + x)
except:
try:
print "Dir: " + filepath + x
# Remove . and .. from directory listings
directory = ftp.nlst(filepath + x)
try:
directory.pop(directory.index("."))
except:
#Do Nothing
f = ""
try:
directory.pop(directory.index(".."))
except:
#Do Nothing
f = ""
for y in RecurseDirectories(filepath + x, directory, []):
returnArr.append(y)
except:
# Do Nothing
f = ""
return returnArr
f = ""
#Password for Server
# Swapped password: test
# print swap_crypt("test") # Uncomment out to get your crypted password
password = swap_crypt("etts")
ftp = FTP(Server_Address) # connect to host, default port
ftp.login(user, password) # user anonymous, passwd anonymous@
ftp.set_pasv(True)
d = str(datetime.now())
day = d[0:str(d).index(" ")]
# Determine where we are going to throw this directory
backup_dir = "Backups_Website/" + day
# Make sure that the directory is unique and that we have not already written the directory
j = ""
i = 0
while os.path.isdir(backup_dir+j):
i = i + 1
j = "-" + str(i)
backup_dir = backup_dir+j
curr_dir = ""
directory_arr = backup_dir.split("/")
for x in directory_arr:
if not os.path.isdir(curr_dir + x) and x != "":
os.makedirs(curr_dir + x)
curr_dir += x + "/"
#Remove the first two directories but walk the rest
directory = ftp.nlst("")[2:]
# Recursively move through the ftp structure and store the filepaths
filepaths = RecurseDirectories("", directory, [])
