【实战教程】用博查Web Search API构建定制化搜索引擎:从零到一打造专属搜索工具!
通过集成博查,你实现了快速获取结构化数据,避免爬虫开发同时还可以在本项目的基础上集成语义排序(Semantic Reranker)、多模态搜索等更多功能,用NLP模型识别同义词(如“AI”高亮“人工智能”)等,赶快自己动手实践一下吧!前往博查AI开放平台领取API Key查看往期教程👇,构建完整RAG应用链《用Python玩转博查Web Search API》《Semantic Reranker
·
想拥有一个专属的搜索引擎?比如只搜索技术文档、医疗报告或最新行业资讯?本文将手把手教你用Python+博查Web Search API,50行代码实现一个可定制化搜索引擎!
引言:为什么需要定制化搜索引擎?
想象以下场景:
- 程序员小明想快速查找某开源框架的报错解决方案,但百度结果中总掺杂广告和过时博客
- 医学研究员李教授需要精准获取最新的癌症治疗论文,但通用搜索引擎返回大量无关内容
痛点:通用搜索缺乏垂直领域优化!
解决方案:基于博查Web Search API,开发一个可定制过滤、排序、高亮的搜索引擎!
一、项目目标与核心功能
1.1 项目目标
- 精准搜索:根据用户需求过滤无关结果
- 灵活展示:支持分页、高亮、排序(如按时间/相关性)
- 快速开发:无需爬虫,直接调用API
1.2 功能清单
| 功能 | 实现方式 |
|---|---|
| 关键词搜索 | 调用博查Web Search API |
| 结果过滤 | 按时间范围、网站域名筛选 |
| 高亮显示 | 关键词标红 |
| 分页展示 | 前端动态加载 |
二、前期准备:API与环境配置
2.1 获取博查API Key
- 访问博查AI开放平台 → 注册账号
- 进入 API Key管理 → 创建密钥(形如
sk-xxxxxx)
2.2 安装依赖库
pip install requests flask python-dotenv
requests:发送HTTP请求flask:搭建简易Web界面python-dotenv:管理环境变量
三、API集成:搜索与数据解析
3.1 调用Web Search API
import requests
import json
def search_web(query: str, api_key: str, max_results=50) -> list:
"""调用博查API获取搜索结果"""
url = "https://api.bochaai.com/v1/web-search"
headers = {"Authorization": f"Bearer {api_key}"}
payload = {
"query": query,
"count": max_results,
"summary": True # 开启摘要
}
try:
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
return data["data"]["webPages"]["value"]
except Exception as e:
print(f"搜索失败:{str(e)}")
return []
参数说明:
count:控制返回结果数量(1~50)summary=True:获取更详细的文本摘要
3.2 数据解析与高亮
def highlight_keywords(text: str, keywords: list) -> str:
"""关键词高亮(支持多个关键词)"""
for word in keywords:
text = text.replace(word, f'<span style="color:red;">{word}</span>')
return text
# 示例:解析并高亮结果
raw_results = search_web("深度学习框架对比", "sk-你的密钥")
processed = [{
"title": highlight_keywords(item["name"], ["深度学习"]),
"url": item["url"],
"snippet": highlight_keywords(item["snippet"], ["框架"]),
"date": item["dateLastCrawled"][:10] # 提取日期
} for item in raw_results]
四、定制化功能实现
4.1 按时间过滤
def filter_by_date(results: list, start_date: str) -> list:
"""过滤指定日期后的结果(日期格式:YYYY-MM-DD)"""
return [item for item in results if item["date"] >= start_date]
# 示例:仅保留2024年后的结果
filtered_results = filter_by_date(processed, "2024-01-01")
4.2 按域名屏蔽
BLACKLIST_DOMAINS = ["baidu.com", "weibo.com"] # 自定义黑名单
def filter_blacklist(results: list) -> list:
"""屏蔽指定域名的结果"""
return [item for item in results
if not any(domain in item["url"] for domain in BLACKLIST_DOMAINS)]
五、前端界面开发(Flask实现)
5.1 HTML模板(templates/index.html)
<!DOCTYPE html>
<html>
<head>
<title>定制搜索引擎</title>
<style>
.result { border: 1px solid #ddd; padding: 15px; margin: 10px; }
.highlight { font-weight: bold; color: #ff4d4d; }
</style>
</head>
<body>
<h1>自定义搜索</h1>
<form action="/search">
<input type="text" name="q" placeholder="输入关键词...">
<button type="submit">搜索</button>
</form>
{% for item in results %}
<div class="result">
<h3>{{ item.title|safe }}</h3>
<a href="{{ item.url }}" target="_blank">{{ item.url }}</a>
<p>{{ item.snippet|safe }}</p>
<small>收录时间:{{ item.date }}</small>
</div>
{% endfor %}
</body>
</html>
5.2 Flask后端逻辑
from flask import Flask, render_template, request
from dotenv import load_dotenv
import os
load_dotenv()
app = Flask(__name__)
API_KEY = os.getenv("BOCHA_API_KEY") # 从.env文件读取密钥
@app.route('/')
def index():
return render_template('index.html', results=[])
@app.route('/search')
def search():
query = request.args.get('q', '')
raw_results = search_web(query, API_KEY)
processed = [
{
"title": highlight_keywords(item["name"], [query]),
"url": item["url"],
"snippet": highlight_keywords(item["snippet"], [query]),
"date": item["dateLastCrawled"][:10]
} for item in raw_results
]
filtered = filter_blacklist(processed)
return render_template('index.html', results=filtered)
if __name__ == '__main__':
app.run(debug=True)
六、项目实战与优化
运行效果
- 创建
.env文件存储API密钥:BOCHA_API_KEY=sk-你的密钥 - 启动服务:
python app.py - 访问
http://localhost:5000,搜索“Python教程”:

七、完整项目代码
注意事项:
- 代码文件命名为 app.py
- 在 app.py 所在的工作目录下新建一个文件夹:templates
- 在 templates 文件夹中新建 html 文件 index.html ,并复制5.1节中的代码
- 在 app.py 所在的工作目录下新建 .env 文件,然后在里面写入:BOCHA_API_KEY = “sk-你的密钥”
- 最后运行 app.py ,打开
http://localhost:5000,即可访问!
from flask import Flask, render_template, request
from dotenv import load_dotenv
import os
import requests
import json
BLACKLIST_DOMAINS = ["baidu.com", "weibo.com"] # 自定义黑名单
def filter_blacklist(results: list) -> list:
"""屏蔽指定域名的结果"""
return [item for item in results
if not any(domain in item["url"] for domain in BLACKLIST_DOMAINS)]
def filter_by_date(results: list, start_date: str) -> list:
"""过滤指定日期后的结果(日期格式:YYYY-MM-DD)"""
return [item for item in results if item["date"] >= start_date]
def highlight_keywords(text: str, keywords: list) -> str:
"""关键词高亮(支持多个关键词)"""
for word in keywords:
text = text.replace(word, f'<span style="color:red;">{word}</span>')
return text
def search_web(query: str, api_key: str, max_results=50) -> list:
"""调用博查API获取搜索结果"""
url = "https://api.bochaai.com/v1/web-search"
headers = {"Authorization": f"Bearer {api_key}"}
payload = {
"query": query,
"count": max_results,
"summary": True # 开启摘要
}
try:
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
data = response.json()
return data["data"]["webPages"]["value"]
except Exception as e:
print(f"搜索失败:{str(e)}")
return []
load_dotenv()
app = Flask(__name__)
API_KEY = os.getenv("BOCHA_API_KEY") # 从.env文件读取密钥
@app.route('/')
def index():
return render_template('index.html', results=[])
@app.route('/search')
def search():
query = request.args.get('q', '')
raw_results = search_web(query, API_KEY)
processed = [
{
"title": highlight_keywords(item["name"], [query]),
"url": item["url"],
"snippet": highlight_keywords(item["snippet"], [query]),
"date": item["dateLastCrawled"][:10]
} for item in raw_results
]
filtered = filter_blacklist(processed)
return render_template('index.html', results=filtered)
if __name__ == '__main__':
app.run(debug=True)
总结
通过集成博查Web Search API,你实现了
- 快速获取结构化数据,避免爬虫开发,
同时还可以在本项目的基础上集成
- 语义排序(Semantic Reranker)、多模态搜索等更多功能,
- 用NLP模型识别同义词(如“AI”高亮“人工智能”)等,
赶快自己动手实践一下吧!
立即行动:
前往博查AI开放平台领取API Key
查看往期教程👇,构建完整RAG应用链
🔗 系列文章推荐:
《Semantic Reranker API:搜索结果智能排序》
让AI告别“古董知识库”,拥抱实时智能新时代!🚀
更多推荐


所有评论(0)