可用纯html实现百度搜索框结构,通过form的action=”https://www.baidu.com/s”、method=”get”及input的name=”wd”即可提交至百度结果页。

用 HTML 模拟百度首页的搜索框结构
纯 HTML 做不出真正能搜的百度网页——它依赖后端服务、JavaScript 交互、反爬策略和实时接口,但你可以复现它的视觉结构和基础表单行为。
重点不是“做成百度”,而是“让表单提交到百度搜索结果页”,这靠 <form></form> 的 action 和 method 就能实现,不需要 js。
-
action="https://www.baidu.com/s":必须指向百度真实搜索接口,不能写成/s或本地路径 -
method="get":百度只响应 GET 请求,POST 会 405 或跳转失败 - 搜索框
name必须是wd:这是百度接口唯一识别关键词的参数名,写成q或keyword都不会返回结果 - 别加多余
onsubmit或Event.preventDefault():会阻断默认跳转,导致点不了搜索
为什么直接 form 提交就能跳转百度结果页
因为百度公开接受带 wd 参数的 GET 请求,例如访问 https://www.baidu.com/s?wd=html 就等于搜了 “html”。浏览器原生 <form method="get"></form> 正好把输入拼成这种 URL。
这不是黑盒调用,而是公开的 HTTP 协议层面协作。只要参数名、地址、方法对,就通。
立即学习“前端免费学习笔记(深入)”;
- 不依赖百度 API Key:普通搜索不需要鉴权
- 不触发风控:单次手动提交不会被拦截,高频自动请求才会
- 移动端也生效:URL 结构一致,手机浏览器一样跳转
- 注意 referrer:从你本地 HTML 文件(
file://)直接打开时,部分浏览器会屏蔽跨域跳转,建议用本地服务器(如python3 -m http.server)预览
input 和 button 的常见错法
看着简单,但几个小地方不对,整个表单就点不动或搜出空页。
- 漏掉
type="submit":按钮写成<button>百度一下</button>默认是type="submit",但显式写上更稳妥;写成type="button"就完全没提交行为 - 给
input加了required却没设placeholder:用户点空搜时会被浏览器拦截,而百度允许空搜索(返回默认页),所以别加required - 用了
autocomplete="off"后输不了中文:某些老版本 chrome 在禁用自动补全时会干扰 IME,去掉即可 - 把
id和for写错配对:比如id="kw"但for="wd",不影响功能但影响可访问性,且容易误导后续维护
能跑起来 ≠ 能上线,这些细节决定是否被当成恶意请求
如果你真想部署一个跳转页(比如内网导航站),得避开百度的简单反爬逻辑。
- 别在
user-agent里暴露爬虫特征:用普通浏览器 UA,不要用curl/7.0或空 UA - 别用 iframe 套百度首页:现代浏览器默认阻止跨域 iframe 加载,且百度页面有
X-Frame-Options: DENY - 不要试图用 JS 拦截表单再发 ajax:百度不支持 CORS,AJAX 会直接被浏览器拒绝,控制台报
No 'access-Control-Allow-Origin' - 如果加了 HTTPS 强制跳转,确保你的域名已备案:百度对未备案域名的跳转会限流或降权,尤其国内服务器
最稳的方式就是老老实实走 form GET 提交——它不炫技,但十年没坏过。