【问题标题】:How to avoid country-based redirects with urlopen or urllib2 in Python如何在 Python 中使用 urlopen 或 urllib2 避免基于国家/地区的重定向
【发布时间】:2014-05-11 12:54:44
【问题描述】:

我使用的是 Python 2.7。

我想打开一个网站的 URL 并从中提取信息。我正在寻找的信息在美国版网站 (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 包来防止此类重定向。

【问题讨论】:

    标签: python redirect urllib2 urlopen


    【解决方案1】:

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

    你可以使用

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

    其中“br”是与打开的网页关联的变量。 Mechanize 也有代理支持

    【讨论】:

    • 谢谢!我设法使用带有 Mechanize 的 CookieJar 功能解决了这个问题。
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多