我有一个大型查询文件,我需要在google中搜索并在另一个文件中返回该查询的结果URL。我正在使用这个包https://pypi.python.org/pypi/googlesearch/0.7.0。
在终端中运行我的程序时,我经常会有20个左右的URL要打印到屏幕上,然后我将GoogleSearch切换到打印到屏幕上的代理号1。几分钟后,一长串错误以无法建立新连接结束:[Errno 60]操作超时'打印到屏幕上。
我的问题是为什么我首先得到结果然后代理号码切换?我怀疑我发送了太多的请求谷歌但有时我运行我的程序我会得到4个结果然后我得到相同的消息和错误。我能做什么?在包中有一个文件search.py,它确定使用哪个代理或何时更改。如果这是错误的原因,是否可以调整请求之间的时间量?
search.py的重要部分
def proxy(self):
if self.use_proxy:
return {"http": settings.PROXY_LIST[self.proxy_no]}
else:
return {"http": None}
def switch_to_next_proxy(self):
num_proxies = len(settings.PROXY_LIST)
GoogleSearch.proxy_no = (self.proxy_no + 1) % num_proxies
if self.verbose:
print >> sys.stderr, ('GoogleSearch switched to '
'proxy number %i' % self.proxy_no)
答案 0 :(得分:1)
在连续搜索请求之后,Google会怀疑机器人的访问并获得Captcha验证。
库googlesearch
实现了代理的自动切换以传递该问题:
- use_proxy :bool,默认:True如果为True,GoogleSearch将使用PROXIES_LIST变量中定义的代理 googlesearch_settings.py进行搜索。如果代理开始获取 HTTP 403 FORBIDDEN响应,它将切换到下一个代理 名单。只有当所有代理获得403时,它才会引发GoogleAPIError 响应。
您应该使用tor网络或任何VPN网络创建许多代理,并将它们添加到PROXIES_LIST
的{{1}}变量