蜘蛛池的常規玩法是通過在大量網頁中放入連結,引来搜尋蜘蛛對目标URL發起抓取。不少运营者以為只要蜘蛛池的連結數量足够多,爬虫就會理睬目标内容,却忽略了另外一個基础门槛——robots协议。当這些被引来的蜘蛛到達站点时,它所做的第一件事通常是检查robots.txt。如果目标URL恰好被Disallow命中了,那這次抓取請求往往在真正讀取頁面之前就被终止。结果就是:蜘蛛池的花費、連結资源、爬虫的多次請求全部成了無效操作。
先理清robots在抓取鏈條中的位置
通常一次搜尋蜘蛛訪問站点的流程是這样的:從某個来源發現一個URL,然後根據網絡协议請求该URL對應的站点,先获取robots.txt,再决定能不能抓取頁面。robots是爬虫在這個站点的行動規范。蜘蛛池是促使爬虫“發現”,而robots决定“能否看”。两者职责完全不同,却會直接影响最终效果。如果蜘蛛池把你精心构造的URL推到爬虫面前,但robots里寫着“Disallow: /”,那么爬虫不會去抓取頁面内容。它可能在日誌里留下一條记錄,但並没有形成有價值的頁面下载。
蜘蛛池的連結入口要主動遵守robots
在搭建蜘蛛池的资源时,第一步不是看連結數量,而是確認入口URL是否被站点robots允许。這里有两层含义:一是蜘蛛池中放出的連結最终指向的那個URL,必须允许抓取;二是如果頁面里還有跳轉,那跳轉過程中涉及的中間URL也要允许爬虫跟踪,否則跳轉逻辑會被中断。很多站点為了安全或降低服務器压力,在robots中屏蔽了带問号的動態地址,但又把這些動態地址放進了蜘蛛池,结果就是大部分抓取被直接拒绝。這種失誤並不少见。
一個简單的检查三步法
- 提取蜘蛛池里所有計划投放的URL,按路径和參數分组。
- 對照robots.txt中的Allow與Disallow規則,标出那些會被禁止的條目。
- 用搜尋引擎UA模拟訪問robots.txt,再模拟訪問目标頁面,看返回狀態是否與预期一致。
如果發現目标URL被禁止,不要试图用蜘蛛池绕過這层限制。第一選擇是修改robots,把它纳入允许范围;如果该URL本身没有意义,那就把它從蜘蛛池中移除。想靠連結把爬虫强行拉到禁止区域,通常只會得到抓取異常的结果,並不會带来收錄或排名。
用robots把無效抓取挡在门外
反過来想,robots也是蜘蛛池运营中的一個過滤工具。当你的站点存在大量參數不同但内容相似的低质URL时,可以用robots將這些無效路径统一屏蔽。例如,很多CMS後台會生成带sort、page等參數的連結,這些内容並不适合作為搜尋落地頁。如果你在蜘蛛池里放了很多這样的連結,爬虫會被引去浏览大量重复頁面,反而降低了對核心頁面的抓取密度。這时應该在robots中定义禁止抓取這些參數URL,同时确保蜘蛛池中的入口尽量保持静態化或使用合理規范的URL结构。
也就是说,robots能帮助你從爬虫的訪問列表里排除那些“不值得抓”的地址。它不會直接提高蜘蛛池的效果,但可以避免蜘蛛的精力被無效资源分散。曾经有一個站点,把站内搜尋頁和篩選頁都放進了蜘蛛池,看統計資料时顯示抓取量很高,日誌中却大量出現robots拦截记錄。後来通過robots把這些頁面禁止,並把蜘蛛池资源全部導向产品詳情頁,核心頁面的抓取频次才開始改善。
Disallow並不等于友好沟通
要注意的是,robots中的Disallow並不只是“不要抓”的提示,很多爬虫會理解為一個清晰的邊界。不過蜘蛛池如果只专注于連結暴露,而不在乎robots约束,就會造成信号冲突。比如你一方面在robots里屏蔽某個路径,另一方面又在蜘蛛池里不断生成该路径的連結,這就是自相矛盾。這會让爬虫每次都被robots拦截,消耗了它的請求次數,却看不到内容。長期如此,站点在搜尋引擎那邊的抓取体驗也會變差。
robots也不是唯一的控制手段
蜘蛛池运营中,robots是必要的配合項,但不能把所有問题都交给robots處理。robots只能說明“抓取與否”,並没有表達頁面重要性或優先級的能力。遇到某些需要重点传递的頁面,你可以在蜘蛛池的锚文本和連結上下文里做優化,让爬虫更愿意顺着連結深入。另外,robots規則的生效有缓存,修改後不會立刻對所有搜尋蜘蛛生效。在這段等待期里,如果蜘蛛池的連結還在繼續触發抓取,那些已经禁止的URL還可能在日誌中表現為“已抓取robots但未抓取頁面”。這不是什么異常,但是运营者要意识到,把robots当過滤器时需要给它一些反應時間,不要因為修改後短時間内没有起效就反复調整。
用robots来控制入口范围,比單纯堆量更能让蜘蛛池的抓取效果發挥出来。
從日誌看蜘蛛池與robots的磨合
如果你希望蜘蛛池运营更規范,建议定期检查搜尋爬虫訪問日誌中關于robots拦截的資料。有些爬虫會返回“Disallowed by robots.txt”的日誌记錄。把這些记錄與蜘蛛池投放的URL列表做比對,能發現哪些投放是被拦截的。拦截比例過高,說明robots與蜘蛛池的协同出了問题。你需要調整的是蜘蛛池的選擇标准,而不是反复增加投放量。只有当蜘蛛池带来的抓取真正落到了頁面内容上,整個鏈路才有意义。
归根结底,蜘蛛池和robots就像一張通行證和一道门禁。通行證可以让爬虫来到门前,但门禁是否打開,取决于站点的配置。把二者协調好,才能让每一次来自蜘蛛池的請求都有机會變成一次真實的内容讀取。