# instinct: スクレイパー「リンクは検出されるのに0件」は抽出/フィルタ段の取りこぼし。保存HTMLで実URL形式を裏取りしてから直す

2026-06-05 vvv-bots #295。se_navi が0件取得。dry-runログに `検出した案件リンク数: 235` と出るのに最終0件だった。原因は se-navi.jp の求人詳細URLが `/jobs/{id}` → `/jobs/agent/{id}` 形式に変更され、フィルタ `re.search(r'/jobs/\d+', href)` が212件全て破棄していたこと。

**Why:** 「0件取得」を見ると真っ先にHTTP失敗・WAF・サイト閉鎖を疑うが、**リンク検出数が出ている時はネットワークは生きており、抽出/フィルタ段の取りこぼし**。サイトのURL/DOM形式変更が主因のことが多い。bscareer(#294)の「移行先404でコードが正しく0件返す外部要因」とは別物で、混同するとコードを無駄にいじる。

**How to apply:**
- 「検出数 > 0 なのに取得0件」→ フィルタ正規表現・タイトル抽出ヒューリスティックを疑う(サイト構造変更)
- SELF-HEAL が保存する `/tmp/bot_heal__page1.html` で**実URL形式を裏取り**してから正規表現を直す。当てずっぽうで直さない
- 検証はDB不要で実HTML+BeautifulSoupに修正前後パターンを当て「0件→N件」を数値で確認(worktreeに本番.envを渡せない時に有効。[[instinct-env-symlink-rm-danger]]
- URLフィルタは `/jobs/[^/]+/\d+(?:[/?#]|$)` のように「カテゴリ1段+数値ID+終端(スラッシュ/クエリ/フラグメント/文末)」で書くと将来のカテゴリ追加に強い
- vvv-bots は PR base=`main`(リモートに`dev`ブランチは無い・CLAUDE.mdの3環境記述は理想)。TodoWrite禁止・bd(beads)管理
- 外部要因(移行先未公開・404)はコードで直さず Issue にコメントして「意図的スキップ」扱い

関連: [[instinct-group-id-range-hardcode]] / [[instinct-vvv-prod-direct-edit-git-drift]]

---
(migrated from local memory/instinct_senavi_url_pattern_change.md)