為什么搜尋蜘蛛不會“点按钮”
搜尋蜘蛛的工作方式是抓取 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 的业務逻辑保留给用戶,不要把它当成蜘蛛池的發現路径。