2012-06-04 12 views
7

Próbuję zrobić program, który otworzy katalog, a następnie użyć wyrażeń regularnych, aby uzyskać nazwy Powerpoints, a następnie utworzyć pliki lokalnie i skopiować ich zawartość. Kiedy uruchomię to, wygląda na to, że działa, ale kiedy faktycznie próbuję otworzyć pliki, ciągle mówią, że wersja jest zła.Python urllib pobieranie zawartości katalogu online

from urllib.request import urlopen 
import re 

urlpath = urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/') 
string = urlpath.read().decode('utf-8') 

pattern = re.compile('ch[0-9]*.ppt') #the pattern actually creates duplicates in the list 

filelist = pattern.findall(string) 
print(filelist) 

for filename in filelist: 
    remotefile = urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/' + filename) 
    localfile = open(filename,'wb') 
    localfile.write(remotefile.read()) 
    localfile.close() 
    remotefile.close() 
+2

Powinieneś ** nigdy ** parsować HTML za pomocą RegEx, zobacz http://stackoverflow.com/a/1732454/851737. Użyj biblioteki parsowania HTML, np. Lxml lub BeautifulSoup. – schlamar

+0

BeautifulSoup to jest. Dziękuję za twoją rekomendację. – davelupt

Odpowiedz

8

Ten kod pracował dla mnie. Po prostu zmodyfikowałem go trochę, ponieważ twój duplikował każdy plik ppt.

from urllib2 import urlopen 
import re 

urlpath =urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/') 
string = urlpath.read().decode('utf-8') 

pattern = re.compile('ch[0-9]*.ppt"') #the pattern actually creates duplicates in the list 

filelist = pattern.findall(string) 
print(filelist) 

for filename in filelist: 
    filename=filename[:-1] 
    remotefile = urlopen('http://www.divms.uiowa.edu/~jni/courses/ProgrammignInCobol/presentation/' + filename) 
    localfile = open(filename,'wb') 
    localfile.write(remotefile.read()) 
    localfile.close() 
    remotefile.close() 
+0

Dziękuję, jesteś mistrzem. – davelupt

+0

Zobacz mój komentarz [powyżej] (http://stackoverflow.com/questions/10875215/python-urllib-downloading-contents-of-an-online-directory#comment14174956_10875215) ze względu na powód. – schlamar

+0

to jest niesamowite, dzięki – Anuj

Powiązane problemy