如何使用PHP解析robots.txt文件?

时间:2017-08-13 22:28:05

标签: php regex web-scraping web-crawler robots.txt

我正在尝试解析网站robots.txt文件(其中facebook将是一个随机网址)。

我想摆脱任何不适合用户代理的行(例如本例中的前两行)。那么也许摆脱任何不以A,D或U开头的行?

我还想让每个用户代理都有自己的关联数组,标题是用户代理,即获取所有允许的谷歌机器人,不允许我在$ arr [googleBot]上打印__。

到目前为止,这是我的代码!

<?php 

//URl to start crawling
$start = "https://www.facebook.com";

//Url to crawl, crawled or not crawl
$crawling = array();
$crawled = array();
$disallow = array();

function getRobots($url)
{
    $robotsUrl = $url . "/robots.txt";
    ini_set("user_agent","Agent (https://www.useragent.com)");
    $robots = @file_get_contents($robotsUrl);
    $robots = explode("\n", $robots);

    $robots = preg_grep('/[^\s]/', $robots);

    print_r($robots);

}

$result = getRobots($start);

1 个答案:

答案 0 :(得分:1)

尝试将其与您的代码合并:

    <?php
function getRobots($url)
    {
        $robotsUrl = $url . "/robots.txt";
          $robot = null;
          //create an object
          $allRobots = [];
          $fh = fopen($robotsUrl,'r');
          while (($line = fgets($fh)) != false) {
            echo $line . "<br>";
           if (preg_match("/user-agent.*/i", $line) ){
                if($robot != null){
                  array_push($allRobots, $robot);
                }

                $robot = new stdClass();
                $robot->userAgent = [];
                $robot->userAgent = explode(':', $line, 2)[1];
                $robot->disAllow = [];
                $robot->allow = [];


              }
            if (preg_match("/disallow.*/i", $line)){
              array_push($robot->disAllow, explode(':', $line, 2)[1]);
            }
            else if (preg_match("/^allow.*/i", $line)){
              array_push($robot->allow, explode(':', $line, 2)[1]);
           }


          }

          var_dump($line);

          if($robot != null){
            array_push($allRobots, $robot);
          }


          //Lazy way of outputting. Loop through for prettier output.
          var_dump($allRobots);
    }

getRobots("https://www.google.com");

?>

基本上,你需要逐行循环。

  • 如果找到User-Agent,请创建一个新的机器人实例。
  • 如果找到disallow,则将disallow string添加到机器人实例
  • 如果找到allow,则将allow string添加到机器人实例
  • 如果找到User-Agent。将机器人添加到所有机器人。重新开始使用空白机器人