2014-03-31 1 views
0

저는 Python 2.7을 사용하고 있습니다.Python에서 urlopen 또는 urllib2로 국가 기반 리디렉션을 피하는 방법

웹 사이트의 URL을 열고 정보를 추출하고 싶습니다. 내가 찾고있는 정보는 미국 버전의 웹 사이트 (http://www.thewebsite.com) 내에 있습니다. 나는 캐나다에 거주하고 있기 때문에 자동으로 캐나다 웹 사이트 (http://ca.thewebsite.com)로 리디렉션됩니다. 나는 이것을 피하려고하는 해결책을 찾고있다.

브라우저 (IE, Firefox, Chrome 등)를 사용하고 http://www.thewebsite.com으로 이동하면 리디렉션됩니다. 이 웹 사이트는 방문객이 보려는 웹 사이트의 "국가 버전"을 선택할 수있는 메뉴를 제공합니다. 미국을 선택하면 더 이상 캐나다 버전의 웹 사이트로 리디렉션되지 않습니다. 이는 브라우징 세션 내의 모든 새 탭에 해당됩니다. 쿠키 저장과 관련이 있다고 생각합니다.

나는 리디렉션 방지하기 위해 다음 코드를 사용하려고 :

import urllib2 
class RedirectHandler(urllib2.HTTPRedirectHandler): 
    def http_error_302(self, req, fp, code, msg, headers): 
     result = urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp) 
     result.status = code 
     return result 
    http_error_301 = http_error_303 = http_error_307 = http_error_302 

opener = urllib2.build_opener(RedirectHandler()) 
webpage = opener.open('http://www.thewebsite.com') 

을하지만 이후 IS 추출 할 수있는 코드의 유일한 비트부터 작동하지 않았다

<html><head></head><body>‹</body></html> 

내 문제에 대한 해결책은 웹 사이트를 긁어 모으는 동안 프록시를 사용하는 것이지만, 파이썬 또는 파이썬 패키지를 독점적으로 사용하여 이러한 종류의 리디렉션을 막는 방법이 있는지 궁금합니다.

답변

0

내가 기계화 사용하는 것이, http://wwwsearch.sourceforge.net/mechanize/

그리고 당신은 사용할 수 있습니다

가 'BR'는과 관련된 변수 인 경우 새로 고침 리디렉션을 (거짓) br.set_handle_refresh을 취급하지 마십시오 # 열린 웹 페이지. 기계화도 프록시 지원을했습니다

+0

고마워요! Mechanize와 함께 CookieJar 기능을 사용하여 문제를 해결했습니다. – LaGuille

관련 문제