为什么搜索蜘蛛不会“点按钮”
搜索蜘蛛的工作方式是抓取 URL、发起 HTTP 请求,绝大多数情况下使用的是 GET。它不会像真实用户那样填写输入框、点击提交按钮,也不会主动触发页面里的表单提交动作。即使页面经过 JavaScript 渲染,搜索蜘蛛通常也只是读取渲染后的链接,而不会替你去完成一次 POST 提交。
所以,如果你的入口页把目标 URL 藏在 form 的 action 里,或者必须通过一个提交按钮才会返回目标地址,蜘蛛能读到的往往只是表单外壳,而不是提交之后的结果。它可能把 action 地址当成普通 URL 尝试一次 GET,也可能完全不请求。
蜘蛛遇到 POST 表单可能出现的几种情况
- 表单方法为 GET:蜘蛛可能跟进 action 地址,并带上默认参数,但不会填用户输入。目标 URL 能否被发现,取决于 GET 请求返回的 HTML 里有没有可读链接。
- 表单方法为 POST:蜘蛛一般不会发 POST。它若对 action 地址发 GET,常见结果是 405 Method Not Allowed、400,或者一个空内容页。
- 表单由 JS 监听 submit 后 fetch/XHR:蜘蛛不触发提交,也就不会拿到提交后的响应,目标 URL 自然发现不了。
- 目标 URL 只在提交后的响应里出现:这层响应蜘蛛看不到,入口页再怎么“有链接”,对蜘蛛来说也等于不存在。
- 表单带 CSRF token、一次性 token 或时间戳:即使蜘蛛误发 GET,也拿不到有效参数,返回的通常不是正常内容。
日志里怎么判断蜘蛛有没有提交
看入口页日志时,重点看请求方法和路径,不要只看访问次数。
- 只有 GET /入口页,没有 POST /提交接口,说明蜘蛛没有提交动作。
- 出现 GET /提交接口?参数=... 但返回 400 或 405,说明它尝试过,但方法或参数不对。
- 出现 POST 请求,但 User-Agent 写着搜索蜘蛛:先确认来源 IP 是否属于对应搜索引擎,很多采集工具会伪造 UA。
- 大量 POST 来自不同 IP,却使用同一个 UA,更可能是工具或扫描行为,不一定是搜索蜘蛛。
判断蜘蛛是否来过,请求方法、路径、返回码、IP 归属要一起看。单看 User-Agent 很容易误判,也容易把普通爬虫当成搜索蜘蛛。
想让 POST 后面的内容被发现,入口页怎么改
- 给目标内容做一个 GET 可访问的展示页,把核心信息和后续链接放在 GET 响应里。
- 在入口页用普通超链接输出目标 URL,不要只放在 form action 或 JS 事件里。
- 如果业务必须保留 POST 接口,可以在入口页额外放一个“查看详情”类的 GET 链接,指向同一份内容的可读地址。
- 把需要被发现的 URL 整理进 sitemap 或通过 URL 提交渠道提交,但前提是该 URL 用 GET 能返回正常内容。
- 不要把 POST 表单当成蜘蛛池唯一的发现路径,尤其是入口页,发现逻辑越直接越稳。
几个容易踩的坑
- 把目标链接写在 form 的 action 里,以为蜘蛛会提交:通常不会。
- 用 JS 模拟提交后把结果 URL 插入页面:蜘蛛没有执行提交,看不到。
- POST 返回 200 的空壳页:即使蜘蛛用 GET 访问,也可能只拿到空内容,无法继续发现链接。
- 表单里带 session、token、时间戳,GET 访问会失效:这类 URL 不适合作为发现入口。
- 入口页本身返回 200,不代表目标 URL 已被发现,两者要分开看。
小结
搜索蜘蛛是“读链接、发 GET”的抓取程序,不是会帮你点按钮的浏览器用户。入口页如果只能通过 POST 表单或接口提交才能到达目标 URL,蜘蛛通常发现不了或抓不到。更稳妥的做法是把目标 URL 变成普通超链接,并保证 GET 请求能返回正常内容;需要 POST 的业务逻辑保留给用户,不要把它当成蜘蛛池的发现路径。