如何解决Jupyter中用DDGS搜图时的DDGSException: No results found异常
解决DDGS图片搜索频繁出现
DDGSException: No results found的问题 以下是几个实用的解决方向,结合你的代码给出修改方案:
1. 添加异常捕获与重试逻辑
临时网络波动或DDG的反爬机制可能导致单次请求失败,添加重试能有效提升稳定性:
from ddgs import DDGS, DDGSException from fastcore.all import * from itertools import islice import time from fastdownload import download_url from fastai.vision.all import * def search_images(keywords, max_images=200, retry_times=3): for _ in range(retry_times): try: with DDGS() as ddgs: results = L(r['image'] for r in islice(ddgs.images(query=keywords), max_images)) if results: return results time.sleep(1) except DDGSException: time.sleep(1) return L() # 使用时先判断结果是否为空 img_urls = search_images('forest', max_images=1) if img_urls: download_url(img_urls[0], 'forest.jpg', show_progress=False) Image.open('forest.jpg').to_thumb(256,256) else: print("多次搜索未获取到结果")
2. 指定DDGS的搜索后端
DDGS支持多种搜索后端,默认后端可能不稳定,尝试切换到lite或html后端:
修改ddgs.images的调用,添加backend参数:
results = L(r['image'] for r in islice(ddgs.images(query=keywords, backend="lite"), max_images))
或者使用html后端:
results = L(r['image'] for r in islice(ddgs.images(query=keywords, backend="html"), max_images))
3. 调整搜索参数
- 明确指定
region参数(比如"us-en"、"sg-en"),避免DDG自动分配的区域无结果 - 降低
safesearch级别(比如设置为"off"),部分关键词在严格安全搜索下可能无结果 - 设置
max_results参数,确保DDG返回足够的结果量
示例:
ddgs.images( query=keywords, region="us-en", safesearch="moderate", max_results=max_images, backend="lite" )
4. 自定义请求头
部分情况下,DDG会拦截缺少浏览器标识的请求,你可以通过DDGS的headers参数添加自定义请求头:
custom_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } with DDGS(headers=custom_headers) as ddgs: results = L(r['image'] for r in islice(ddgs.images(query=keywords), max_images))
额外建议
- 避免短时间内频繁发起大量请求,添加适当的间隔时间(比如每次请求后
sleep(1)) - 尝试更换不同的VPN节点,部分节点可能被DDG列入黑名单
内容的提问来源于stack exchange,提问作者Alex YAN
相关产品推荐
相关产品推荐

