我正在尝试解析网站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);
答案 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
。将机器人添加到所有机器人。重新开始使用空白机器人