如何在Python中使用urlopen或urllib2避免基于国家/地区的重定向

时间:2014-03-31 23:35:32

标签: python redirect urllib2 urlopen

我正在使用Python 2.7。

我想打开网站的网址并从中提取信息。我要查找的信息是在美国版本的网站(http://www.thewebsite.com)内。由于我在加拿大,我会自动重定向到加拿大版本的网站(http://ca.thewebsite.com)。我正在寻找一种解决方案,试图避免这种情况。

如果我使用任何浏览器(IE,Firefox,Chrome,...)并导航到http://www.thewebsite.com,我将被重定向。该网站提供了一个菜单,访问者可以在其中选择他想要查看的网站的“国家版本”。一旦我选择了美国,我就不再被重定向到该网站的加拿大版本。对于浏览会话中的任何新选项卡都是如此。我怀疑这与cookie存储有关。

我尝试使用以下代码来阻止重定向:

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')

但它似乎没有用,因为之后可以提取的唯一代码是:

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

我的问题的解决方案是在抓取网站时使用代理,但我想知道是否有任何方法可以使用Python或Python软件包来阻止这种重定向。

1 个答案:

答案 0 :(得分:0)

我会使用mechanize,http://wwwsearch.sourceforge.net/mechanize/

你可以使用

#不要处理刷新重定向 br.set_handle_refresh(假)

哪里&#39; br&#39;是与打开的网页相关联的变量。 Mechanize还有代理支持