通过HTTP状态代码看搜索引擎怎么Crawl你的站[转]

本文详细解释了HTTP状态码的意义,包括2xx成功、3xx重定向、4xx客户端错误及5xx服务器错误等类别,并举例说明了搜索引擎如何利用这些状态码进行网页抓取。
通过HTTP状态代码通通透透看搜索引擎怎么Crawl你的站。

  下面的表格是所有 HTTP 状态代码及其定义。
 

代码 指示
2xx 成功
200 正常;请求已完成。
201 正常;紧接 POST 命令。
202 正常;已接受用于处理,但处理尚未完成。
203 正常;部分信息 — 返回的信息只是一部分。
204 正常;无响应 — 已接收请求,但不存在要回送的信息。
3xx 重定向
301 已移动 — 请求的数据具有新的位置且更改是永久的。
302 已找到 — 请求的数据临时具有不同 URI。
303 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。
304 未修改 — 未按预期修改文档。
305 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。
306 未使用 — 不再使用;保留此代码以便将来使用。
4xx 客户机中出现的错误
400 错误请求 — 请求中有语法问题,或不能满足请求。
401 未授权 — 未授权客户机访问数据。
402 需要付款 — 表示计费系统已有效。
403 禁止 — 即使有授权也不需要访问。
404 找不到 — 服务器找不到给定的资源;文档不存在。
407 代理认证请求 — 客户机首先必须使用代理认证自身。
415 介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。
5xx 服务器中出现的错误
500 内部错误 — 因为意外情况,服务器不能完成请求。
501 未执行 — 服务器不支持请求的工具。
502 错误网关 — 服务器接收到来自上游服务器的无效响应。
503 无法获得服务 — 由于临时过载或维护,服务器无法处理请求。

  比如说:
2004-12-03 07:33:25 61.135.145.208 - *.*.*.* 80 GET /index/119.htm - 304 Baiduspider+(+http://www.baidu.com/search/spider.htm)
这就意味着百度蜘蛛在2004-12-03 07:33:25爬过/index/119.htm这一页,它发现这页是没有更新过的。

  再比如说:2004-12-03 07:33:25 61.135.145.208 - *.*.*.* 80 GET /index/120.htm - Googlebot/2.1
(http://www.google.com/bot.html)
这就意味着Google蜘蛛在2004-12-03 07:33:25爬过/index/119.htm这一页,它发现这页是新的,并全部爬完。 

<think>好的,我现在需要帮助用户找到如何限制PHP网搜索引擎抓取频次的方法。首先,我得回忆一下用户提供的引用内容,看看有没有相关的信息。 根据引用[1],用户提到了robots.txt文件,这个文件可以用来告诉蜘蛛哪些页面可以抓取,哪些不可以。虽然这主要是控制抓取范围,但可能和频次有关联吗?不过robots.txt本身可能无法直接限制抓取频次,但可以作为第一步措施,设置合理的规则,避免不必要的页面被抓取,从而间接减少抓取次数。 引用[3]中的案例提到,当服务器因为频繁访问变慢时,通过屏蔽特定的User-Agent(如带有Android和Dalvik的)来减少无效请求。这可能是一个方法,即通过识别搜索引擎的User-Agent,然后进行频次控制。比如,在PHP中检测到百度蜘蛛的User-Agent后,记录其访问次数,超过阈值时返回503或其他状态码,提示蜘蛛稍后再来。 引用[5]提到了技术优化,比如服务器响应速度和HTML压缩率,但同时也提到了使用百度工具的抓取诊断工具。可能百度长平台允许设置抓取频次?用户可以在那里调整,让搜索引擎自动调整抓取频率。这可能需要登录百度长平台进行操作,而不是通过PHP代码实现,但可以作为补充方法。 另外,引用[3]还提到使用Nginx防火墙来屏蔽特定的UA,这可能是在服务器层面进行配置,比如在Nginx中设置限流模块,限制来自同一IP或UA的请求频率。不过用户的问题是关于PHP网的,所以可能需要结合服务器配置和PHP代码。 现在,我需要将这些方法整理出来。首先,使用robots.txt引导蜘蛛合理抓取,其次,在PHP中通过检测User-Agent并记录访问次数,超过限制时返回503。同时,结合服务器层面的配置,如Nginx的限流设置,或者使用宝塔防火墙屏蔽高频UA。此外,利用百度工具调整抓取频次也是一个可行方案。 需要注意的是,直接限制搜索引擎的抓取可能会影响网的收录,所以需要谨慎操作。例如,返回503状态码时,应该包含Retry-After头,告诉蜘蛛何时可以重新抓取,这样更友好。另外,确保robots.txt设置正确,避免屏蔽重要页面。 可能还需要考虑日志分析,定期查看访问日志,识别高频抓取的IP或UA,进行针对性限制。比如在PHP中,可以记录每个蜘蛛IP的访问时间,计算频率,如果超过预设值,则暂时拒绝访问。 总结步骤应该是:1. 使用robots.txt控制抓取范围;2. PHP代码实现频次检测和限制;3. 服务器配置(如Nginx限流);4. 利用百度工具调整;5. 日志监控和UA屏蔽。同时,要注意对搜索引擎友好,避免误封。</think>针对PHP网限制搜索引擎抓取频次的需求,可以通过以下方法实现: ### 一、核心控制策略 1. **Robots协议控制** 在网根目录创建$robots.txt$文件,通过`Crawl-delay`参数建议蜘蛛抓取间隔。例如限制百度蜘蛛每10秒抓取一次: ```txt User-agent: Baiduspider Crawl-delay: 10 ``` 此方法属于建议性限制,实际效果依赖蜘蛛遵守程度[^1][^5] 2. **PHP频率检测** 在入口文件添加访问频率监控: ```php $spiders = ['Baiduspider', 'Googlebot']; $ua = $_SERVER['HTTP_USER_AGENT'] ?? ''; $isSpider = preg_match('/('.implode('|',$spiders).')/i', $ua); if($isSpider) { $ip = $_SERVER['REMOTE_ADDR']; $key = 'spider:'.$ip; $redis = new Redis(); $redis->connect('127.0.0.1'); if($redis->exists($key) && $redis->get($key) > 30) { // 30次/分钟 header('HTTP/1.1 503 Service Unavailable'); header('Retry-After: 300'); // 5分钟后重试 exit; } $redis->incr($key); $redis->expire($key, 60); // 60秒计数周期 } ``` 需配合Redis实现精准计数,避免文件锁性能损耗[^3] ### 二、服务器层加固 1. **Nginx限流配置** ```nginx http { limit_req_zone $http_user_agent zone=spider_zone:10m rate=2r/s; server { location / { if ($http_user_agent ~* (Baiduspider|Googlebot)) { limit_req zone=spider_zone burst=5 nodelay; } } } } ``` 此配置对蜘蛛IP实施2次/秒的请求限制,突发允许5个请求[^3] 2. **防火墙UA过滤** 识别异常特征UA进行拦截: ```php // 在公共头文件中添加 $blockUaPatterns = ['/Dalvik/i', '/Android.*HttpClient/i']; foreach($blockUaPatterns as $pattern) { if(preg_match($pattern, $_SERVER['HTTP_USER_AGENT'])) { header("HTTP/1.1 403 Forbidden"); exit; } } ``` ### 三、搜索引擎平台调控 1. **百度工具** 通过「抓取频次」功能动态调整: ``` 百度长平台 -> 网支持 -> 抓取频次 ``` 支持按天级设置抓取配额,系统会自动学习网负载能力 ### 四、日志监控优化 建议每日分析访问日志: ```bash # 分析蜘蛛访问频率 cat access.log | grep Baiduspider | awk '{print $1}' | sort | uniq -c | sort -nr ``` 发现异常IP可加入防火墙黑名单[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值