2011-02-25 2 views
4

편집 :urlgrab가 실패한 urlgrabber는 각 파일 다음에 연결을 종료한다고 알리는 경우에도 성공합니다. urllib2가 프록시를 처리하는 방식이나 내가 사용하는 방식에 문제가있는 것처럼 보입니다!몇 번의 호출 후 urlib2.urlopen이 실패합니다.

import urlgrabber 

for i in range(1, 100): 
    url = "http://www.iana.org/domains/example/" 
    urlgrabber.urlgrab(url, proxies={'http':'http://<user>:<password>@<proxy url>:<proxy port>'}, keepalive=1, close_connection=1, throttle=0) 

안녕하세요 모든 : 은 어쨌든, 여기에 루프에서 파일을 검색 할 수있는 가장 간단한 코드입니다!

urllib2를 통해 많은 파일을 가져 오는 매우 간단한 파이썬 스크립트를 작성하려고합니다.

이 스크립트는 직장에서 프록시를 통해 작동해야합니다 (인트라넷에서 파일을 가져 오는 경우 프록시가없는 경우 문제가 없습니다).

"HTTPError : HTTP Error 401 : basic auth failed"라는 요청을 두 번 입력하면 스크립트가 실패합니다. 왜 그럴지 모른다고 생각 해요? 프록시가 내 인증을 거절하는 것 같지만 그 이유는 무엇입니까? urlopen 요청의 첫 번째 커플 올바르게 통과했다!

편집 : 프록시가 수행 할 수있는 일종의 제한을 피하기 위해 요청간에 10 초의 절전을 추가해도 결과가 변경되지 않았습니다.

여기 (분명히 벗겨 식별 정보) 내 스크립트의 단순화 된 버전입니다 : 사전에

import urllib2 

passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passmgr.add_password(None, '<proxy url>:<proxy port>', '<my user name>', '<my password>') 
authinfo = urllib2.ProxyBasicAuthHandler(passmgr) 

proxy_support = urllib2.ProxyHandler({"http" : "<proxy http address>"}) 
opener = urllib2.build_opener(authinfo, proxy_support) 
urllib2.install_opener(opener) 

for i in range(100): 
with open("e:/tmp/images/tst{}.htm".format(i), "w") as outfile: 
    f = urllib2.urlopen("http://www.iana.org/domains/example/") 
    outfile.write(f.read()) 

감사합니다!

답변

1

urlgrabber 모듈의 keepalive 처리기를 사용하여 연결 수를 최소화 할 수 있습니다.

import urllib2 
from keepalive import HTTPHandler 
keepalive_handler = HTTPHandler() 
opener = urllib2.build_opener(keepalive_handler) 
urllib2.install_opener(opener) 

fo = urllib2.urlopen('http://www.python.org') 

프록시 설정에서 올바르게 작동하는지 확신 할 수 없습니다. Keepalive 모듈을 해킹해야 할 수 있습니다.

+0

keepalive 모듈이 urlgrabber에서 사라진 것 같습니다 (jwat의 anwer 참조 : http://stackoverflow.com/questions/1037406/python-urllib2-with-keep-alive). 그러나 urlgrabber.urlgrab은 프록시를 지원하고 모든 파일을 성공적으로 검색했습니다. 질문에 관련 코드를 추가했습니다. –

1

프록시가 요청을 조절할 수 있습니다. 나는 네가 봇처럼 생겼다고 생각한다.

시간 제한을 추가하고 그 결과가 사용자에게 전달되는지 확인할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 아직까지 기쁨은 없지만 요청 사이에 10 초 동안 잠을 자면 ... 이것은 이상합니다! –

관련 문제