bopoda / robots-txt-parser

PHP 类,用于根据 Google 和 Yandex 规范解析 robots.txt 文件。

安装次数:160,711

依赖项: 2

建议者: 0

安全性: 0

星标: 43

关注者: 7

分支: 17

开放性问题: 7

语言:DIGITAL 命令语言

v2.4.1 2021-05-11 17:44 UTC

This package is auto-updated.

Last update: 2024-08-28 11:59:01 UTC


README

Build Status

RobotsTxtParser —— 解析 robots.txt 文件所有指令的 PHP 类

RobotsTxtValidator —— 根据robots.txt规则检查 URL 是否允许的 PHP 类

尝试在线上实时域名上 RobotsTxtParser 的演示

解析遵循 Google & Yandex 规范的规则

最新改进

  1. 根据 clean-param 语法解析 Clean-param 指令。
  2. 删除注释(从 '#' 字符开始,直到第一个换行符之前的内容将被忽略)
  3. 解析 Host 的改进——交集指令应指向用户代理 '*'; 如果有多个主机,搜索引擎将采用第一个的值。
  4. 从类中删除了未使用的方法,进行了重构,并修正了类的属性作用域。
  5. 添加了更多测试用例,以及添加了整个新功能的测试用例。
  6. RobotsTxtValidator 类添加到检查 URL 是否允许解析。
  7. 在 2.0 版本中,RobotsTxtParser 的速度得到了显著提高。

支持的指令

  • DIRECTIVE_ALLOW = 'allow';
  • DIRECTIVE_DISALLOW = 'disallow';
  • DIRECTIVE_HOST = 'host';
  • DIRECTIVE_SITEMAP = 'sitemap';
  • DIRECTIVE_USERAGENT = 'user-agent';
  • DIRECTIVE_CRAWL_DELAY = 'crawl-delay';
  • DIRECTIVE_CLEAN_PARAM = 'clean-param';
  • DIRECTIVE_NOINDEX = 'noindex';

安装

使用以下命令安装最新版本

composer require bopoda/robots-txt-parser

运行测试

使用命令运行 phpunit 测试

php vendor/bin/phpunit

使用示例

您可以通过从网站获取 robots.txt 文件的内容来启动解析器

$parser = new RobotsTxtParser(file_get_contents('http://example.com/robots.txt'));
var_dump($parser->getRules());

或者简单地使用文件的内容作为输入(即:当内容已经缓存时)

$parser = new RobotsTxtParser("
	User-Agent: *
	Disallow: /ajax
	Disallow: /search
	Clean-param: param1 /path/file.php

	User-agent: Yahoo
	Disallow: /

	Host: example.com
	Host: example2.com
");
var_dump($parser->getRules());

这将输出

array(2) {
  ["*"]=>
  array(3) {
    ["disallow"]=>
    array(2) {
      [0]=>
      string(5) "/ajax"
      [1]=>
      string(7) "/search"
    }
    ["clean-param"]=>
    array(1) {
      [0]=>
      string(21) "param1 /path/file.php"
    }
    ["host"]=>
    string(11) "example.com"
  }
  ["yahoo"]=>
  array(1) {
    ["disallow"]=>
    array(1) {
      [0]=>
      string(1) "/"
    }
  }
}

为了验证 URL,请使用 RobotsTxtValidator 类

$parser = new RobotsTxtParser(file_get_contents('http://example.com/robots.txt'));
$validator = new RobotsTxtValidator($parser->getRules());

$url = '/';
$userAgent = 'MyAwesomeBot';

if ($validator->isUrlAllow($url, $userAgent)) {
    // Crawl the site URL and do nice stuff
}

贡献

请随意在此存储库中创建 PR。请遵循 PSR 风格。

查看参与此项目的 贡献者列表

最后的话

请使用 v2.0+ 版本,该版本遵循相同的规则但性能更高。