2012-12-08 3 views
0

누구든지 저에게 무엇을 잘못 말하고 있을까요? 이 코드에 오류가 계속 발생합니다.Python에서 여러 파일을 다운로드 할 때 오류가 발생했습니다.

난 그냥 실험으로 primaryschoolgames에있는 SWF의 모든을 다운로드하기 위해 노력하고있어하지만 난 그것을 할 수없는 것 :

: 이것은 내가 점점 계속 오류입니다

#!/usr/bin/env python 
# encoding: utf-8 

import sys, getopt 
import os, urllib, urllib2, re, string, math 

help_message = ''' 
''' 
no_param = ''' 
''' 

verbose = False 
fakeMode = False 
curPath = os.getcwd() + "/" 

urlRegex = '' 
FileRegex = '' 
outputPath = '' 
currentFile = '' 

def removeDuplicates(seq): 
# Not order preserving 
keys = {} 
for e in seq: 
    keys[e] = 1 
return keys.keys() 

def go(filename): 
print "Having a look at " + string.capwords(filename) 

global urlRegex, FileRegex, outputPath, currentFile 

url = 'http://cdn.primarygames.com' + filename 

urlRegex = '/'+filename+'/.+/download' 
FileRegex = '/'+filename+'/(.*?)/download' 
outputPath = curPath+"Swfs"+"/" 

if not os.path.exists(outputPath): 
    os.makedirs(outputPath) 

filelist = [] 

while(len(url)): 
    # looping system 
    newlist, url = scrapePage(url, filename) 
    filelist.extend(newlist) 

print 'Found %s Files.' % len(filelist) 

for swf in filelist: 
    swfurl = swf['url'] 
    name = swf['name'] 
    currentFile = name 
    #print 'Downloading '+name, 
    if not fakeMode: 
     #print '' 
     urllib.urlretrieve('http://cdn.primarygames.com' + swfurl, outputPath+name) 
    else: 
     print 'Not downloading %s.' % name 
print "All done with %s!" % filename 

def scrapePage(url, filename): 
print 'Looking through '+url 
html = urllib2.urlopen(url).read() 
swflist = re.findall(urlRegex, html) 
swflist = removeDuplicates(swflist) 

swfs = [] 

for swfurl in swflist: 
    r = re.compile(FileRegex) 
    swfname = r.search(swfurl).group(1) 
    swfname = swfname.replace('-', ' ') 
    name = filename + "/" + swfname + ".swf" 
    name = string.capwords(name) 
    swf.append({'name':name,'url':swfurl}) 

r = re.compile(nextRegex) 
result = r.search(html) 
if result: 
    nextUrl = 'http://cdn.primarygames.com' + result.group(1) 
else: 
    nextUrl = '' 

return swfs, nextUrl 


def main(argv=None): 
global verbose, fakeMode 

if argv is None: 
    argv = sys.argv 
try: 
    try: 
     opts, args = getopt.getopt(argv[1:], "ho:vf", ["help", "output="]) 
    except getopt.error, msg: 
     raise Usage(msg) 

    # option processing 
    for option, value in opts: 
     if option == "-v": 
      verbose = True 
     if option in ("-f", "--fake"): 
      fakeMode = True 
     if option in ("-h", "--help"): 
      raise Usage(help_message) 
     if option in ("-o", "--output"): 
      output = value 

    if len(args): 
     swfs = args 
    else: 
     raise Usage(no_param) 

except Usage, err: 
    print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg) 
    if err.msg != help_message: 
     print >> sys.stderr, "\t for help use --help" 
    return 2 

for swf in swfs: 
    go(swf) 


if __name__ == "__main__": 
sys.exit(main()) 

Having a look at * 
Looking through http://cdn.primarygames.com/* 
Traceback (most recent call last): 
File "C:\PrimarySchoolGames Swf Downloader.py" 
, line 129, in <module> 
sys.exit(main()) 
File "C:\PrimarySchoolGames Swf Downloader.py" 
, line 125, in main 
go(swf) 
File "C:\PrimarySchoolGames Swf Downloader.py" 
, line 48, in go 
newlist, url = scrapePage(url, filename) 
File "C:\Users\Terrii\Desktop\VB Extra's\PrimarySchoolGames Swf Downloader.py" 
, line 67, in scrapePage 
html = urllib2.urlopen(url).read() 
File "C:\Python27\lib\urllib2.py", line 126, in urlopen 
return _opener.open(url, data, timeout) 
File "C:\Python27\lib\urllib2.py", line 400, in open 
response = self._open(req, data) 
File "C:\Python27\lib\urllib2.py", line 418, in _open 
'_open', req) 
File "C:\Python27\lib\urllib2.py", line 378, in _call_chain 
result = func(*args) 
File "C:\Python27\lib\urllib2.py", line 1207, in http_open 
return self.do_open(httplib.HTTPConnection, req) 
File "C:\Python27\lib\urllib2.py", line 1177, in do_open 
raise URLError(err) 
urllib2.URLError: <urlopen error [Errno 11004] getaddrinfo failed> 
+2

들여 쓰기를 수정하면 답변을 얻을 수 있습니다. 지금과 같은 방식으로 진행 상황을 알리는 것은 불가능합니다. – MikeHunter

답변

1

실패한 getaddrinfo은 일반적으로 제공하는 URL에 문제가 있음을 나타냅니다. 주소를 확인할 수 있기 때문에 프록시 서버를 사용하지 않았습니까? 이로 인해 DNS 조회가 실패 할 수 있으며 결과적으로이 메시지가 나타납니다.

은 파이썬은 윈도우에서 사용하는 프록시를 결정하는 방법 : Windows 환경에서

을, 프록시 환경 변수가 설정되지 않은 경우, 프록시 설정이 레지스트리의 인터넷 설정 섹션에서 얻을 수 있습니다.

@MikeHunter와 더 많은 도움을 받으려면. 귀하의 코드를 수정하려고했지만 Exception-Class를 구현하여 코드를 실행해야하므로 코드를 다시 들여 쓰고 더 많은 정보를 제공해야한다고 생각합니다. 죄송합니다.

관련 문제