【问题标题】:python - Service Unavailable - urllib proxy not workingpython - 服务不可用 - urllib 代理不起作用
【发布时间】:2017-11-06 09:02:02
【问题描述】:

我以前从谷歌获取信息,我知道我会在几次请求后阻止,这就是我试图通过代理的原因。对于我使用的代理 来自此链接的 ProxyBroker: The Link

但是,如果我使用代理,谷歌会返回 503。如果我点击错误,谷歌会显示我的 IP,而不是代理 IP。

这是我尝试过的:

usedProxy = self.getProxy()
if usedProxy is not None:
    proxies = {"http": "http://%s" % usedProxy[0]}
    headers = {'User-agent': 'Mozilla/5.0'}
    proxy_support = urlrequest.ProxyHandler(proxies)
    opener = urlrequest.build_opener(proxy_support, urlrequest.HTTPHandler(debuglevel=1))
    urlrequest.install_opener(opener)

    req = urlrequest.Request(search_url, None, headers)
    with contextlib.closing(urlrequest.urlopen(req)) as url:
        htmltext = url.read()

我尝试过使用 http 和 https。

即使请求进展顺利,我也会收到带有以下消息的 503:

send: b'GET http://www.google.co.in/search?q=Test/ HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.google.co.in\r\nUser-Agent: Mozilla/5.0\r\nConnection: close\r\n\r\n'
reply: 'HTTP/1.1 302 Found\r\n'
header: Date header: Server header: Location header: Pragma header: Expires header: Cache-Control header: Content-Type header: Content-Length header: X-XSS-Protection header: X-Frame-Options header: 

>Connection send: b'GET http://ipv4.google.com/sorry/index?continue=http://www.google.co.in/search%3Fq%3DTest/&q=EgTCDs9XGMbOgNAFIhkA8aeDS0dE8uXKu31DEbfj5mCVdhpUO598MgFy HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: ipv4.google.com\r\nUser-Agent: Mozilla/5.0\r\n

>Connection: close\r\n\r\n'
reply: 'HTTP/1.1 503 Service Unavailable\r\n'

如果没有发生上述错误,我最终得到以下错误:

>[Errno 54] Connection reset by peer

我的问题是:

  1. 每次我的IP都是来自错误链接的IP而不是代理IP吗?

    Google Error Link

  2. 如果每次主机 IP 都显示在来自 google 的错误消息中并且 问题来自代理,如何绕过该错误?

【问题讨论】:

    标签: python web-scraping proxy


    【解决方案1】:

    Google 似乎知道我使用了代理,因为它使用 HTTPS,而 HTTPS 代理似乎不起作用。因此检测到 HTTP 代理,这就是我在 50-60 次查询后直接被阻止的原因。

    我的解决方案:

    我尝试了在 Stackoverflow 上找到的所有解决方案,但它们并不能像睡眠 10 秒那样正常工作。但是我发现了一篇有同样问题的文章,当时解决方案“相当”简单。首先,我从 Python 下载了fake-useragent 库,它提供了大量有用的用户代理。

    我在每次请求时从该列表中随机选择一个用户代理。我还添加了只使用常见的用户代理,因为否则页面有不同的 HTML,不适合我的读取方法。

    安装 Useragent 并随机选择一个后,我在 15 到 90 秒之间添加了一个睡眠,因为文章作者尝试了不同的时间跨度,并且在 30 秒内他被阻止了。因此,通过这两个简单的更改,我的程序自 10 小时以来成功运行,没有出现故障。

    我希望这对你也有帮助,因为我花了很多时间来弄清楚谷歌什么时候屏蔽了你。因此,它每次都简单地检测,但让您使用此配置。

    玩得开心,祝大家爬取成功!

    编辑:

    该程序在被禁止之前会收到大约 1000 个请求。

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 1970-01-01
      • 2019-03-09
      • 2013-09-27
      • 1970-01-01
      • 2015-12-24
      • 2022-01-21
      • 1970-01-01
      • 2017-07-09
      相关资源
      最近更新 更多