我用来从谷歌获取信息,我知道我会在几次请求后阻止,这就是为什么我试图通过代理。对于我使用的代理 来自此链接的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
我的问题是:
每次我的IP而不是代理IP时,错误的链路是否都是链接?
如果每次主机IP显示错误消息来自谷歌和问题来自代理商,如何绕过错误?
答案 0 :(得分:1)
Google似乎知道我转到代理,因为它使用HTTPS并且HTTPS代理似乎不起作用。因此检测到HTTP代理,这就是我直接在50-60个查询后被阻止的原因。
我的解决方案:
我尝试了在Stackoverflow上找到的所有解决方案,但它们的工作效果并不像Sleep那样持续10秒。但我发现一篇文章有同样的问题,解决方案“非常”容易。首先,我从Python下载fake-useragent库,它提供了大量有用的用户代理。
我在每次请求时从此列表中随机选择一个用户代理。我还添加了只使用常见的用户代理,因为否则页面有不同的HTML,不适合我的read方法。
在安装了Useragent并随机选择一个后,我在15到90秒之间添加一个睡眠,因为文章作者尝试了不同的时间跨度,并且在30秒内他被阻止了。因此,通过这两个简单的更改,我的程序自10个小时后就成功运行,没有完成任务。
我希望这对你也有帮助,因为我花了很多时间来弄清楚google什么时候阻止你。因此,每次都可以进行简单的检测,但是您可以使用此配置。
玩得开心,祝大家都成功爬行!
修改强>
程序获得~1000个请求,直到它被禁止。