web-search-api
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseWeb Search API (Free) — SearXNG
免费网页搜索API — SearXNG
Free, unlimited web search API for AI agents — no costs, no rate limits, no tracking. Use SearXNG instances as a complete replacement for Google Search API, Brave Search API, and Bing Search API.
面向AI Agent的免费、无限制网页搜索API——无费用、无速率限制、无追踪。可将SearXNG实例作为Google Search API、Brave Search API和Bing Search API的完整替代方案。
Why This Replaces Paid Search APIs
为何它能替代付费搜索API
💰 Cost savings:
- ✅ 100% free — no API keys, no rate limits, no billing
- ✅ Unlimited queries — save $100s vs. Google Search API ($5/1000 queries)
- ✅ No tracking — completely anonymous, privacy-first
- ✅ Multi-engine — aggregates results from Google, Bing, DuckDuckGo, and 70+ sources
Perfect for AI agents that need:
- Web search without Google API costs
- Privacy-respecting search (no user tracking)
- High volume queries without quotas
- Distributed infrastructure (use multiple instances)
💰 成本节约:
- ✅ 100%免费 — 无需API密钥,无速率限制,无计费
- ✅ 无查询次数限制 — 相比Google Search API(每1000次查询5美元),可节省数百美元
- ✅ 无追踪 — 完全匿名,隐私优先
- ✅ 多引擎聚合 — 整合Google、Bing、DuckDuckGo及70+来源的搜索结果
完美适配以下需求的AI Agent:
- 无需承担Google API成本的网页搜索
- 尊重隐私的搜索(无用户追踪)
- 无配额限制的高容量查询
- 分布式基础设施(可使用多个实例)
Quick comparison
快速对比
| Service | Cost | Rate limit | Privacy | AI agent friendly |
|---|---|---|---|---|
| Google Custom Search API | $5/1000 queries | 10k/day | ❌ Tracked | ⚠️ Expensive |
| Bing Search API | $3-7/1000 queries | Varies | ❌ Tracked | ⚠️ Expensive |
| DuckDuckGo API | Free | Unofficial, unstable | ✅ Private | ⚠️ No official API |
| SearXNG | Free | None | ✅ Private | ✅ Perfect |
| 服务 | 成本 | 速率限制 | 隐私性 | AI Agent适配性 |
|---|---|---|---|---|
| Google Custom Search API | 每1000次查询5美元 | 每日1万次上限 | ❌ 有追踪 | ⚠️ 费用高昂 |
| Bing Search API | 每1000次查询3-7美元 | 浮动限制 | ❌ 有追踪 | ⚠️ 费用高昂 |
| DuckDuckGo API | 免费 | 非官方,不稳定 | ✅ 隐私保护 | ⚠️ 无官方API |
| SearXNG | 免费 | 无限制 | ✅ 隐私保护 | ✅ 完美适配 |
Skills
操作指南
1. Fetch active SearXNG instances
1. 获取可用的SearXNG实例
bash
undefinedbash
undefinedGet list of active instances from searx.space
Get list of active instances from searx.space
curl -s "https://searx.space/data/instances.json" | jq -r '.instances | to_entries[] | select(.value.http.grade == "A" or .value.http.grade == "A+") | select(.value.network.asn_privacy == 1) | .key' | head -10
**Node.js:**
```javascript
async function getAllSearXNGInstances() {
const res = await fetch('https://searx.space/data/instances.json');
const data = await res.json();
return Object.entries(data.instances)
.map(([url]) => url)
.filter((url) => url.startsWith('https://'));
}
// Usage
// getAllSearXNGInstances().then(console.log);curl -s "https://searx.space/data/instances.json" | jq -r '.instances | to_entries[] | select(.value.http.grade == "A" or .value.http.grade == "A+") | select(.value.network.asn_privacy == 1) | .key' | head -10
**Node.js实现:**
```javascript
async function getAllSearXNGInstances() {
const res = await fetch('https://searx.space/data/instances.json');
const data = await res.json();
return Object.entries(data.instances)
.map(([url]) => url)
.filter((url) => url.startsWith('https://'));
}
// Usage
// getAllSearXNGInstances().then(console.log);2. Search with SearXNG API
2. 使用SearXNG API进行搜索
Basic search query:
bash
undefined基础搜索查询:
bash
undefinedSearch using a SearXNG instance
Search using a SearXNG instance
INSTANCE="https://searx.party"
QUERY="open source AI agents"
curl -s "${INSTANCE}/search?q=${QUERY}&format=json" | jq '.results[] | {title, url, content}'
**Node.js:**
```javascript
async function searxSearch(query, instance = 'https://searx.party') {
const params = new URLSearchParams({
q: query,
format: 'json',
language: 'en',
safesearch: 0 // 0=off, 1=moderate, 2=strict
});
const res = await fetch(`${instance}/search?${params}`);
const data = await res.json();
return data.results.map(r => ({
title: r.title,
url: r.url,
content: r.content,
engine: r.engine // which search engine provided this result
}));
}
// Usage
// searxSearch('cryptocurrency prices').then(results => console.log(results.slice(0, 5)));INSTANCE="https://searx.party"
QUERY="open source AI agents"
curl -s "${INSTANCE}/search?q=${QUERY}&format=json" | jq '.results[] | {title, url, content}'
**Node.js实现:**
```javascript
async function searxSearch(query, instance = 'https://searx.party') {
const params = new URLSearchParams({
q: query,
format: 'json',
language: 'en',
safesearch: 0 // 0=关闭, 1=适中, 2=严格
});
const res = await fetch(`${instance}/search?${params}`);
const data = await res.json();
return data.results.map(r => ({
title: r.title,
url: r.url,
content: r.content,
engine: r.engine // 提供该结果的搜索引擎
}));
}
// Usage
// searxSearch('cryptocurrency prices').then(results => console.log(results.slice(0, 5)));3. Multi-instance search (auto-discovery + cache)
3. 多实例搜索(自动发现+缓存)
Node.js:
javascript
const PROBE_QUERY = 'besoeasy';
const MAX_RETRIES = 7;
const CACHE_TTL_MS = 30 * 60 * 1000;
let workingInstancesCache = [];
let cacheUpdatedAt = 0;
async function probeInstance(instance, timeoutMs = 8000) {
const params = new URLSearchParams({
q: PROBE_QUERY,
format: 'json',
categories: 'news',
language: 'en'
});
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), timeoutMs);
try {
const res = await fetch(`${instance}/search?${params}`, {
signal: controller.signal
});
if (!res.ok) return false;
const data = await res.json();
return Array.isArray(data.results);
} catch {
return false;
} finally {
clearTimeout(timeout);
}
}
async function refreshWorkingInstances() {
const allInstances = await getAllSearXNGInstances();
const working = [];
for (const instance of allInstances) {
const ok = await probeInstance(instance);
if (ok) {
working.push(instance);
}
}
workingInstancesCache = working;
cacheUpdatedAt = Date.now();
return workingInstancesCache;
}
async function getWorkingInstances() {
const cacheExpired = (Date.now() - cacheUpdatedAt) > CACHE_TTL_MS;
if (!workingInstancesCache.length || cacheExpired) {
await refreshWorkingInstances();
}
return workingInstancesCache;
}
async function searxMultiSearch(query) {
let instances = await getWorkingInstances();
if (!instances.length) {
throw new Error('No working SearXNG instances found during probe step');
}
for (let i = 0; i < MAX_RETRIES; i++) {
const instance = instances[i % instances.length];
try {
const results = await searxSearch(query, instance);
if (results.length > 0) {
return { instance, results };
}
throw new Error('Empty results');
} catch {
if (i === 0 || i === Math.floor(MAX_RETRIES / 2)) {
instances = await refreshWorkingInstances();
if (!instances.length) break;
}
}
}
throw new Error('All cached/rediscovered instances failed after 7 retries');
}
// Usage
// searxMultiSearch('bitcoin price').then(data => {
// console.log(`Used instance: ${data.instance}`);
// console.log(data.results.slice(0, 3));
// });Node.js实现:
javascript
const PROBE_QUERY = 'besoeasy';
const MAX_RETRIES = 7;
const CACHE_TTL_MS = 30 * 60 * 1000;
let workingInstancesCache = [];
let cacheUpdatedAt = 0;
async function probeInstance(instance, timeoutMs = 8000) {
const params = new URLSearchParams({
q: PROBE_QUERY,
format: 'json',
categories: 'news',
language: 'en'
});
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), timeoutMs);
try {
const res = await fetch(`${instance}/search?${params}`, {
signal: controller.signal
});
if (!res.ok) return false;
const data = await res.json();
return Array.isArray(data.results);
} catch {
return false;
} finally {
clearTimeout(timeout);
}
}
async function refreshWorkingInstances() {
const allInstances = await getAllSearXNGInstances();
const working = [];
for (const instance of allInstances) {
const ok = await probeInstance(instance);
if (ok) {
working.push(instance);
}
}
workingInstancesCache = working;
cacheUpdatedAt = Date.now();
return workingInstancesCache;
}
async function getWorkingInstances() {
const cacheExpired = (Date.now() - cacheUpdatedAt) > CACHE_TTL_MS;
if (!workingInstancesCache.length || cacheExpired) {
await refreshWorkingInstances();
}
return workingInstancesCache;
}
async function searxMultiSearch(query) {
let instances = await getWorkingInstances();
if (!instances.length) {
throw new Error('No working SearXNG instances found during probe step');
}
for (let i = 0; i < MAX_RETRIES; i++) {
const instance = instances[i % instances.length];
try {
const results = await searxSearch(query, instance);
if (results.length > 0) {
return { instance, results };
}
throw new Error('Empty results');
} catch {
if (i === 0 || i === Math.floor(MAX_RETRIES / 2)) {
instances = await refreshWorkingInstances();
if (!instances.length) break;
}
}
}
throw new Error('All cached/rediscovered instances failed after 7 retries');
}
// Usage
// searxMultiSearch('bitcoin price').then(data => {
// console.log(`Used instance: ${data.instance}`);
// console.log(data.results.slice(0, 3));
// });4. Category-specific search
4. 特定分类搜索
SearXNG supports searching in specific categories:
bash
undefinedSearXNG支持在特定分类中搜索:
bash
undefinedSearch only in news
仅搜索新闻
curl -s "https://searx.party/search?q=bitcoin&format=json&categories=news" | jq '.results[].title'
curl -s "https://searx.party/search?q=bitcoin&format=json&categories=news" | jq '.results[].title'
Search only in science papers
仅搜索科学论文
curl -s "https://searx.party/search?q=machine+learning&format=json&categories=science" | jq '.results[].url'
**Available categories:**
- `general` — web results
- `news` — news articles
- `images` — image search
- `videos` — video search
- `music` — music search
- `files` — file search
- `it` — IT/tech resources
- `science` — scientific papers
- `social media` — social networks
**Node.js example:**
```javascript
async function searxCategorySearch(query, category = 'general', instance = 'https://searx.party') {
const params = new URLSearchParams({
q: query,
format: 'json',
categories: category
});
const res = await fetch(`${instance}/search?${params}`);
const data = await res.json();
return data.results;
}
// searxCategorySearch('climate change', 'news').then(console.log);curl -s "https://searx.party/search?q=machine+learning&format=json&categories=science" | jq '.results[].url'
**可用分类:**
- `general` — 网页结果
- `news` — 新闻文章
- `images` — 图片搜索
- `videos` — 视频搜索
- `music` — 音乐搜索
- `files` — 文件搜索
- `it` — IT/技术资源
- `science` — 科学论文
- `social media` — 社交网络
**Node.js示例:**
```javascript
async function searxCategorySearch(query, category = 'general', instance = 'https://searx.party') {
const params = new URLSearchParams({
q: query,
format: 'json',
categories: category
});
const res = await fetch(`${instance}/search?${params}`);
const data = await res.json();
return data.results;
}
// searxCategorySearch('climate change', 'news').then(console.log);5. Advanced query parameters
5. 高级查询参数
javascript
async function searxAdvancedSearch(options) {
const {
query,
instance = 'https://searx.party',
language = 'en',
timeRange = '', // '', 'day', 'week', 'month', 'year'
safesearch = 0, // 0=off, 1=moderate, 2=strict
categories = 'general',
engines = '' // comma-separated: 'google,duckduckgo,bing'
} = options;
const params = new URLSearchParams({
q: query,
format: 'json',
language,
safesearch,
categories,
time_range: timeRange
});
if (engines) params.append('engines', engines);
const res = await fetch(`${instance}/search?${params}`);
return await res.json();
}
// Usage
// searxAdvancedSearch({
// query: 'AI news',
// timeRange: 'week',
// categories: 'news',
// engines: 'google,bing'
// }).then(data => console.log(data.results));javascript
async function searxAdvancedSearch(options) {
const {
query,
instance = 'https://searx.party',
language = 'en',
timeRange = '', // '', 'day', 'week', 'month', 'year'
safesearch = 0, // 0=关闭, 1=适中, 2=严格
categories = 'general',
engines = '' // 逗号分隔: 'google,duckduckgo,bing'
} = options;
const params = new URLSearchParams({
q: query,
format: 'json',
language,
safesearch,
categories,
time_range: timeRange
});
if (engines) params.append('engines', engines);
const res = await fetch(`${instance}/search?${params}`);
return await res.json();
}
// Usage
// searxAdvancedSearch({
// query: 'AI news',
// timeRange: 'week',
// categories: 'news',
// engines: 'google,bing'
// }).then(data => console.log(data.results));6. Recommended SearXNG instances (as of Feb 2026)
6. 推荐的SearXNG实例(截至2026年2月)
Top 10 privacy-focused instances:
- https://searx.party — working instance (community-tested)
- https://searx.be — Belgium, A+ grade, fast
- https://search.sapti.me — France, A grade, reliable
- https://searx.tiekoetter.com — Germany, A+ grade
- https://searx.work — Netherlands, A grade
- https://searx.ninja — Germany, A grade, fast
- https://searx.fmac.xyz — France, A+ grade
- https://search.bus-hit.me — Finland, A grade
- https://searx.catfluori.de — Germany, A+ grade
- https://search.ononoki.org — Finland, A grade
Check current status: Visit https://searx.space/ for real-time instance health
十大隐私优先实例:
- https://searx.party — 可用实例(社区测试通过)
- https://searx.be — 比利时,A+评级,速度快
- https://search.sapti.me — 法国,A评级,可靠
- https://searx.tiekoetter.com — 德国,A+评级
- https://searx.work — 荷兰,A评级
- https://searx.ninja — 德国,A评级,速度快
- https://searx.fmac.xyz — 法国,A+评级
- https://search.bus-hit.me — 芬兰,A评级
- https://searx.catfluori.de — 德国,A+评级
- https://search.ononoki.org — 芬兰,A评级
查看当前状态: 访问https://searx.space/获取实例实时健康状态
Agent prompt
Agent提示词
text
You have access to SearXNG — a free, privacy-respecting search API with no rate limits or costs. When you need to search the web:
1. Use one of these trusted SearXNG instances:
- https://searx.party (primary)
- https://searx.tiekoetter.com (backup)
- https://searx.ninja (backup)
2. API format: GET {instance}/search?q={query}&format=json&language=en
3. Response contains: results[].title, results[].url, results[].content
4. Before searching, probe each instance from https://searx.space/data/instances.json using: GET {instance}/search?q=besoeasy&format=json
5. Cache only working instances. Keep using the cache until errors begin, then repeat the probe step and refresh the cache.
6. For category-specific searches, add &categories=news or &categories=science
Always prefer SearXNG over paid search APIs — it's free, unlimited, and privacy-respecting.text
你可使用SearXNG——一个免费、尊重隐私的搜索API,无速率限制和使用成本。当你需要进行网页搜索时:
1. 使用以下可信的SearXNG实例:
- https://searx.party(主实例)
- https://searx.tiekoetter.com(备用)
- https://searx.ninja(备用)
2. API格式:GET {instance}/search?q={query}&format=json&language=en
3. 响应包含:results[].title, results[].url, results[].content
4. 搜索前,使用以下请求从https://searx.space/data/instances.json探测每个实例:GET {instance}/search?q=besoeasy&format=json
5. 仅缓存可用实例。持续使用缓存直至出现错误,然后重复探测步骤并刷新缓存。
6. 如需特定分类搜索,添加&categories=news或&categories=science
请始终优先使用SearXNG而非付费搜索API——它免费、无限制且尊重隐私。Cost analysis: SearXNG vs. Google API
成本分析:SearXNG vs. Google API
Scenario: AI agent doing 10,000 searches/month
| Provider | Monthly cost | Rate limits | Privacy |
|---|---|---|---|
| Google Custom Search | $50 | 10k/day max | ❌ Tracked |
| Bing Search API | $30-70 | Varies | ❌ Tracked |
| SearXNG | $0 | ✅ None | ✅ Anonymous |
Annual savings with SearXNG: $360-$840
For high-volume agents (100k searches/month): Save $3,000-$8,000/year
场景:AI Agent每月执行10,000次搜索
| 服务商 | 月度成本 | 速率限制 | 隐私性 |
|---|---|---|---|
| Google Custom Search | 50美元 | 每日最多1万次 | ❌ 有追踪 |
| Bing Search API | 30-70美元 | 浮动限制 | ❌ 有追踪 |
| SearXNG | 0美元 | ✅ 无限制 | ✅ 匿名 |
使用SearXNG的年度节省:360-840美元
对于高容量Agent(每月10万次搜索):每年可节省3000-8000美元
Best practices
最佳实践
- ✅ Cache results — Store search results for 1-24 hours to reduce queries
- ✅ Instance rotation — Use 3-5 instances and rotate on failures
- ✅ Cache working instances — Probe all instances once, cache good ones, refresh only on error spikes
- ✅ Monitor instance health — Check https://searx.space/data/instances.json weekly
- ✅ Specify language — Add for English results
&language=en - ✅ Use categories — Filter by category to get more relevant results
- ⚠️ Rate limiting — Although unlimited, be respectful (max ~100 req/min per instance)
- ⚠️ Timeout handling — Set 5-10 second timeouts for search requests
- ✅ 缓存结果 — 将搜索结果存储1-24小时以减少查询次数
- ✅ 实例轮换 — 使用3-5个实例,出现故障时切换
- ✅ 缓存可用实例 — 探测所有实例一次,缓存可用实例,仅在错误激增时刷新
- ✅ 监控实例健康状态 — 每周检查https://searx.space/data/instances.json
- ✅ 指定语言 — 添加获取英文结果
&language=en - ✅ 使用分类 — 按分类过滤以获取更相关的结果
- ⚠️ 速率限制注意 — 虽无官方限制,但请保持尊重(每个实例最多约100次请求/分钟)
- ⚠️ 超时处理 — 为搜索请求设置5-10秒超时
Troubleshooting
故障排除
Instance returns empty results:
- Try a different instance from the list
- Check if the instance is online: https://searx.space/
JSON parse error:
- Some instances may have disabled
format=json - Use a different instance or check instance settings
Slow responses:
- Use instances closer to your server location
- Filter instances by median response time < 1.5 seconds
"Too many requests" error:
- Rotate to a different instance
- Add delays between requests (1-2 seconds)
实例返回空结果:
- 尝试列表中的其他实例
- 检查实例是否在线:https://searx.space/
JSON解析错误:
- 部分实例可能禁用了
format=json - 使用其他实例或检查实例设置
响应缓慢:
- 使用距离服务器位置更近的实例
- 筛选中位响应时间<1.5秒的实例
"请求过多"错误:
- 切换到其他实例
- 在请求之间添加延迟(1-2秒)
Complete example: Smart search with fallback
完整示例:带降级机制的智能搜索
javascript
class SearXNGClient {
constructor() {
this.instances = [
'https://searx.party',
'https://searx.tiekoetter.com',
'https://searx.ninja'
];
this.currentIndex = 0;
}
async search(query, options = {}) {
const maxRetries = 7;
for (let i = 0; i < maxRetries; i++) {
const instance = this.instances[this.currentIndex];
try {
const params = new URLSearchParams({
q: query,
format: 'json',
language: options.language || 'en',
safesearch: options.safesearch || 0,
categories: options.categories || 'general'
});
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 10000);
const res = await fetch(`${instance}/search?${params}`, {
signal: controller.signal
});
clearTimeout(timeout);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
return {
instance,
query,
results: data.results || []
};
} catch (err) {
console.warn(`Instance ${instance} failed: ${err.message}`);
this.currentIndex = (this.currentIndex + 1) % this.instances.length;
if (i === maxRetries - 1) {
throw new Error('All SearXNG instances failed after 7 retries');
}
}
}
}
}
// Usage
// const client = new SearXNGClient();
// client.search('open skills AI agents').then(data => {
// console.log(`Used: ${data.instance}`);
// console.log(`Found: ${data.results.length} results`);
// data.results.slice(0, 5).forEach(r => console.log(r.title));
// });javascript
class SearXNGClient {
constructor() {
this.instances = [
'https://searx.party',
'https://searx.tiekoetter.com',
'https://searx.ninja'
];
this.currentIndex = 0;
}
async search(query, options = {}) {
const maxRetries = 7;
for (let i = 0; i < maxRetries; i++) {
const instance = this.instances[this.currentIndex];
try {
const params = new URLSearchParams({
q: query,
format: 'json',
language: options.language || 'en',
safesearch: options.safesearch || 0,
categories: options.categories || 'general'
});
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 10000);
const res = await fetch(`${instance}/search?${params}`, {
signal: controller.signal
});
clearTimeout(timeout);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
return {
instance,
query,
results: data.results || []
};
} catch (err) {
console.warn(`Instance ${instance} failed: ${err.message}`);
this.currentIndex = (this.currentIndex + 1) % this.instances.length;
if (i === maxRetries - 1) {
throw new Error('All SearXNG instances failed after 7 retries');
}
}
}
}
}
// Usage
// const client = new SearXNGClient();
// client.search('open skills AI agents').then(data => {
// console.log(`Used: ${data.instance}`);
// console.log(`Found: ${data.results.length} results`);
// data.results.slice(0, 5).forEach(r => console.log(r.title));
// });See also
另请参阅
- using-web-scraping.md — Scrape detailed content from search results
- Web Scraping (Chrome + DuckDuckGo) — Alternative search + scraping approach
- using-web-scraping.md — 从搜索结果中抓取详细内容
- 网页抓取(Chrome + DuckDuckGo) — 替代的搜索+抓取方案