googlesearch模块重复返回相同结果,如何修复?
问题
运行googlesearch模块时,多次调用始终返回相同结果,但需求是每次调用能获取不同的搜索结果。已尝试修改num、stop参数,使用break、enumerate等方法,均未解决问题。查阅网络及PyPi相关文档也未找到有效方案,附上代码寻求技术建议:
count = 0 now = datetime.now() current_time = now.strftime("%H:%M:%S") def Gsearch(searchQuery): #global count fixed counter, result is still returning the same thing global current_time global count count += 1 try : import googlesearch for i in googlesearch.search(query=searchQuery,tld="com",lang="en",num=10,stop=10,pause=2): print ("(" + current_time + ")") print (count) print(i + "\n") gs = Gsearch(searchQuery) gs.Gsearch() except ImportError: print("No module named 'google' found. To install, type 'pip install google' into cmd.")
解决方案
你的代码存在几个核心问题,导致重复返回相同结果:
- 递归调用逻辑错误:在
for循环内重复调用Gsearch(searchQuery),还错误尝试调用gs.Gsearch()(Gsearch是函数而非类),导致函数反复执行但始终处理同一批初始结果。 - 模块导入位置不合理:将
import googlesearch放在函数内部,每次调用都重复导入,既浪费性能也无必要。 - 时间变量未实时更新:
current_time仅在脚本启动时赋值一次,后续调用不会刷新时间。 - 缺少结果偏移逻辑:
googlesearch.search默认从第一页取结果,未设置偏移参数的话,每次调用都只会获取前10条,自然重复。
针对这些问题,修正后的代码如下:
import datetime from googlesearch import search count = 0 def Gsearch(search_query, start_page=0): global count count += 1 # 实时获取当前时间 current_time = datetime.datetime.now().strftime("%H:%M:%S") try: # 通过start参数控制结果偏移,实现翻页获取不同内容 # num=10为每页条数,start=start_page*10表示从第N页开始加载 for result in search( query=search_query, tld="com", lang="en", num=10, stop=10, pause=2, start=start_page * 10 ): print(f"({current_time})") print(count) print(result + "\n") except ImportError: print("找不到'google'模块,请执行命令安装:pip install google") # 示例调用:依次获取第1页、第2页的结果 Gsearch("your search keyword", start_page=0) Gsearch("your search keyword", start_page=1)
关键修改说明:
- 将模块导入移到全局作用域,避免重复导入
- 每次调用函数时实时生成当前时间
- 新增
start_page参数,通过start=start_page*10控制结果偏移,实现翻页获取不同结果 - 移除错误的递归调用,避免逻辑混乱和死循环
额外注意:Google搜索本身存在缓存机制,短时间内多次搜索相同关键词,即使翻页也可能出现部分重复结果。建议适当延长pause时间,或在关键词允许的情况下加入动态变化参数(如当前日期)来减少重复。
内容的提问来源于stack exchange,提问作者Limewire
相关产品推荐
相关产品推荐

