基于Python的高级谷歌搜索:选择题答案验证实现咨询
嘿,这个需求挺实用的!我来给你拆解下具体怎么实现,分几个核心步骤来,代码示例也给你准备好了:
核心实现思路
整个功能可以拆成解析输入、搜索统计、结果整合三个大环节,每个环节都有需要注意的细节:
一、先搞定搜索API的问题
直接爬谷歌网页很容易被反爬机制拦截,而且解析HTML也麻烦,最稳妥的方式是用Google Custom Search API。你需要先去谷歌云平台申请API密钥,再创建一个自定义搜索引擎(可以设置搜索整个网页),拿到这两个参数后就能合法调用接口了。免费版有一定的调用配额,足够小项目用,超出的话可以付费扩容。
二、解析题目和选项
首先得把用户输入的内容拆成「题目文本」和「三个选项」。如果是结构化输入(比如用户明确按格式提交),直接提取就行;如果是非结构化的,可能需要用正则或者简单的字符串处理来拆分,比如匹配选项的前缀(A/B/C、1/2/3之类的)。
三、两种搜索统计方式的实现
1. 搜索题目本身,统计选项出现频次
- 调用API获取题目搜索结果的标题和摘要文本
- 把所有文本转成小写(避免大小写敏感的问题),然后用正则的精确匹配(比如
\b选项文本\b)来统计每个选项出现的次数 - 这里要注意,别用简单的字符串包含,不然会把类似“苹果树”里的“苹果”也算进去,精确匹配更准确
2. 搜索题目+选项的组合,对比结果数量
- 对每个选项,构造精确匹配的搜索词:
"题目内容" "选项内容"(加双引号让谷歌做精确匹配) - 调用API后,提取返回结果里的
totalResults字段,这个就是该组合的搜索结果总数 - 结果数越多,说明这个选项和题目绑定的关联性越强,大概率是正确答案
四、整合结果输出结论
把两种统计方式的结果结合起来:
- 如果频次最高的选项和组合搜索结果最多的选项一致,那可信度很高
- 如果不一致,优先参考组合搜索的结果,因为精确匹配的关联性更直接
代码示例(Python)
先安装依赖:
pip install requests
然后是核心代码:
import requests import re # 替换成你自己的API密钥和自定义搜索引擎ID API_KEY = "your_api_key_here" SEARCH_ENGINE_ID = "your_search_engine_id_here" def get_search_total(query): """获取搜索结果总数""" url = f"https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={SEARCH_ENGINE_ID}&q={query}" try: response = requests.get(url, timeout=10) response.raise_for_status() data = response.json() return int(data.get('searchInformation', {}).get('totalResults', 0)) except Exception as e: print(f"搜索出错:{e}") return 0 def count_option_in_results(question, options): """统计选项在题目搜索结果中的出现频次""" url = f"https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={SEARCH_ENGINE_ID}&q={question}" counts = {opt: 0 for opt in options} try: response = requests.get(url, timeout=10) response.raise_for_status() data = response.json() # 遍历所有搜索结果的标题和摘要 for item in data.get('items', []): text = f"{item.get('title', '')} {item.get('snippet', '')}".lower() for opt in options: # 精确匹配选项,避免部分匹配 pattern = re.compile(rf"\b{re.escape(opt.lower())}\b") counts[opt] += len(pattern.findall(text)) except Exception as e: print(f"统计频次出错:{e}") return counts # 示例使用 if __name__ == "__main__": # 假设输入的题目和选项 question = "以下哪种动物属于哺乳动物?" options = ["鸡", "猫", "蛇"] # 统计选项出现频次 occurrence_counts = count_option_in_results(question, options) print("选项在搜索结果中的出现频次:") for opt, cnt in occurrence_counts.items(): print(f"- {opt}: {cnt}次") # 统计题目+选项组合的搜索结果数 combo_counts = {} for opt in options: combo_query = f'"{question}" "{opt}"' combo_counts[opt] = get_search_total(combo_query) print("\n题目+选项组合的搜索结果数:") for opt, cnt in combo_counts.items(): print(f"- {opt}: {cnt}条") # 综合判断 top_occurrence = max(occurrence_counts, key=occurrence_counts.get) top_combo = max(combo_counts, key=combo_counts.get) if top_occurrence == top_combo: print(f"\n最可能的正确答案:{top_occurrence}(频次和组合搜索结果均排名第一)") else: print(f"\n频次最高选项:{top_occurrence},组合搜索结果最多选项:{top_combo},建议优先参考组合搜索结果")
一些注意事项
- API配额:Google Custom Search API免费版每天有100次调用额度,超出会报错,记得监控配额
- 异常处理:代码里加了超时和异常捕获,避免因为网络问题或者API返回错误导致程序崩溃
- 搜索词优化:如果题目里有特殊符号或者无关关键词,可以先做清洗,比如去掉标点、冗余的语气词,提升搜索准确性
内容的提问来源于stack exchange,提问作者Aryan Sawhney
相关产品推荐
相关产品推荐

