我有一个很大的查询文件,我需要在谷歌中搜索,并在另一个文件中返回该查询的结果URL。我在用这个包https://pypi.python.org/pypi/googlesearch/0.7.0。
当我在终端上运行程序时,通常我会得到20个左右的URL打印到屏幕上,然后我会将GoogleSearch切换到打印到屏幕的代理号码1。几分钟后,屏幕上会打印出一长串错误,以"无法建立新连接:[Erno 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)
在连续的搜索请求后,谷歌会怀疑有机器人访问,并获得Captcha验证。
库googlesearch
实现了代理的自动切换以传递该问题:
- use_proxy:bool,默认值:True如果为True,GoogleSearch将使用的proxies_LIST变量中定义的代理googlesearch_settings.py来进行搜索。如果代理开始HTTP 403禁止响应,它将切换到列表只有当所有代理都得到403时,它才会引发GoogleAPIError响应
您应该使用tor网络或任何vpn网络创建许多代理,并将它们添加到googlesearch_settings.py
的PROXIES_LIST
变量