Собственно, хочу показать свой небольшой скрипт на Python + Grab. Логинится на сайт и потом сохраняет в указанную папку все фото из альбомов ВК, сортируя по папкам, соответствующим альбомам. Это мой практически первый опыт с питоном, так что хотело бы услышать замечания по работе. Code: ##################################################### # Author: FunkyCat # This script grab all photos from your vk.com # account and save then into specified folder ##################################################### # Request: Grab (http://packages.python.org/grab/) ##################################################### #######################SETTINGS###################### #VK login email = "[email protected]" #VK password password = "qwerty" #Folder for photos photosDir = "imgs" #Save logs (request headers and loaded pages) saveLogs = False #Folder for logs logDir = 'logs' ##################################################### import os import urllib import urlparse from grab import Grab def ProcessAlbumName(name): tmpname = name i = 0 for c in tmpname: if c == '/' or c == ':' or c == '*' or c == '?' or c == '"' or c == '<' or c == '>' or c == '|': tmpname = tmpname[:i]+tmpname[i+1:] i += 1 return tmpname def GetLocalFileNameFromURL(fullpath): (filepath, filename) = os.path.split(urlparse.urlparse(fullpath).path) return filename def ProcessAlbum(g, url, dir, myId): #Create folder for images try: os.makedirs(dir) except OSError: pass #Open album page g.go('http://m.vk.com'+url+'?oid='+myId) #Getting count of photos photosCount = int(g.xpath_number('.//div[@class="summary"]')) print "Count: " + str(photosCount) #Getting pages count pagesCount = photosCount//8 if photosCount%8 != 0: pagesCount += 1 currPage = 0 procCount = 0 #Process pages while currPage < pagesCount: #Load page g.go('http://m.vk.com'+url+'?oid='+myId+'&st='+str(currPage*8)) #Process photos for thumbPhotoElem in g.xpath_list('.//table[@class="thumbs"]/tr/td/a'): #Get photo page url photoPageUrl = thumbPhotoElem.get('href') #Load it g.go('http://m.vk.com'+photoPageUrl) #Get photo url and save it fileUrl = g.xpath('.//table[@class="photo"]/tr/td[@class="td1"]/a/img').get('src') localName = str(procCount)+'. '+GetLocalFileNameFromURL(fileUrl) print localName urllib.urlretrieve(fileUrl,dir+'/'+localName) procCount += 1 currPage += 1 g=Grab() if saveLogs: import logging logging.basicConfig(level=logging.DEBUG) #Create folder for logs if not exist try: os.makedirs(logDir) except OSError: pass g.setup(log_dir=logDir) #Logging in g.go('http://vk.com/login.php?email='+email+'&pass='+password); #Get albums page url albumsUrl = g.xpath('.//li[@id="l_ph"]/a').get('href') #Get my id myId = albumsUrl[7:] #Open it g.go('http://vk.com'+albumsUrl) #Create folder for photos try: os.makedirs(photosDir) except OSError: pass #Process albums albumNum = 0 for album in g.xpath_list('.//div[@class="clear_fix album"]'): albumUrl = album[1][0][0].get('href') #Normalize album URL albumUrl = albumUrl[:6]+albumUrl[5+len(myId)+2:] albumDir = photosDir+'/'+str(albumNum)+'. '+ProcessAlbumName(album[1][0][0].text) #Print album info print '-----------------------------' print 'Album: ' + album[1][0][0].text ProcessAlbum(g,albumUrl,albumDir,myId) albumNum += 1