Robots.txt 协议—百度之星

摘要:
机器人。txt是放置在网站根目录中的纯文本文件。www.robottxt。org是机器人的主页。txt协议。在这个网站上,你可以找到许多与机器人相关的材料。txt协议。机器人。txt协议http://www.robotstxt.org/wc/norobots.html上有更详细的描述。请注意,此逻辑单元有自己的判断逻辑要求和机器人。除了txt协议的一致性外,请注意容错问题。输入格式的第一行是正整数m,表示机器人中的行数。txt文件,后面跟着m行,这是robots.txt的全文。

题目描述

搜 索引擎是靠 Web Robot (又称 Spider )来收集互联网上浩如烟海的网页的。 Spider 就像一个旅行家一般,不知疲倦地奔波于万维网的空间,将遇到的页面收集下来供搜索引擎索引。对于一个网站的管理员来说,如果希望搜索引擎只收录自己指定的 内容,或者指定某些不希望搜索引擎访问的内容,该如何去做呢?他需要的就是 Robots Exclusion Protocol 协议,这里简单的称它做 Robots.txt 协议。

Robots.txt 是一个放置在网站根目录下的纯文本文件。举例来说,当 Spider 访问一个网站(比如 http://www.example.com )时,首先会检查该网站中是否存在 http://www. example.com/robots.txt 这个文件,如果 Spider 找到这个文件,它就会根据这个文件的内容,来确定它访问权限的范围。

www.robotstxt.org 是 robots.txt 协议的 Home Page ,在这个站点上你可以找到很多 robots.txt 协议相关的资料。 Robots.txt 协议在 http://www.robotstxt.org/wc/norobots.html 上有比较详尽的描述。

你的任务就是编写 Spider 中的一个逻辑单元,这个单元的作用就是来判断一个网站的一些 URL 是否被禁止抓取。对方网站的站点在这里假设是 www.example.com , 这个 Spider 的 User-agent 当然是 Baiduspider 。注意,这个逻辑单元除了本身的判断逻辑要求与 robots.txt 协议一致外,还要注意容错的问题。互联网上纷繁芜杂,会出现很多意想不到的错误。如何能够对一个对错参半的 robots.txt 进行解析,把其中正确的挑拣出来、把错误的部分忽略掉,也是一个不小的挑战哦。都会遇到什么错误?在开始爬行互联网之前,谁都不知道。

 

输入格式

第一行是一个正整数 m ,表示 robots.txt 文件的行数,后面跟 m 行,是 robots.txt 的全文。下一行包含一个正整数 n , 表示 URL 的行数,后面跟 n 行 URL ,这个就是你要判断的 URL 的列表。

 

输出格式

每条 URL 输出一行,每行两列,第一列是一个数字,如果这条 URL 被禁止,则输出 0 ,否则输出 1 。第二列是这条 URL 本身。

 

输入样例

2

User-agent: *

Disallow: /tmp/

2

http://www.example.com/index.html

http://www.example.com/tmp/somepage.html

 

输出样例

1 http://www.example.com/index.html

0 http://www.example.com/tmp/somepage.html

 

评分方法

本题包含 20 组数据,均满足 0<=n,m<=100 。

这个题看上去简单,但是不容易考虑周全,robots.txt中可能有很多陷阱,当然我也没有心思去考虑周全,本来开始是读取文件的,后来认真读题发现是标准输入,又改了下,大致程序如下,只对正确的格式作出判断,有错误的地方以及多个robots就没办法了:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>

using namespace std;

int main(int argc, char *argv[])
{
    string s = "\n";
    vector<string> v;
    //ifstream fin("Robots.txt");

    int i;
    cin>>i;
    string first, second;
    int count = 0;
    while (count<i)
    {
        cin>>first>>second;
        if (first.find("Disallow")==0)
        {
            v.push_back(second);
            //cout<<"disallow: "<<word<<endl;
        }
        getline(cin, s);
        //cout<<s<<endl;
        count++;
    }
    count = 0;
    cin>>i;
    //cout<<i<<endl;
    vector<string> hv;
    string http;
    while (count<i)
    {
        cin>>http;
        hv.push_back(http);
        count++;
    }
    for (vector<string>::iterator h=hv.begin();h!=hv.end();++h )
    {
        int b = 1;
        for(vector<string>::iterator i=v.begin();i!=v.end();++i)
        {
            if((*h).find(*i)!=string::npos)
            {
                b = 0;
                break;
            }
        }
        cout<<b<<" "<<*h<<endl;
    }
   
       
       
    return 0;
}

对于如下的简单robots是没有问题的:

2
User-agent: *
Disallow: /tmp/
5
http://www.example.com/index.html
http://www.example.com/tmp/somepage.html
http://www.example.com/index.html
http://www.example.com/tmp/somepage.html
http://www.example.com/index.html

免责声明:文章转载自《Robots.txt 协议—百度之星》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Fedora Core 3安装杂记(二)阿里巴巴笔试题选解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【H5】15 表单 其四 数据发送

一旦在客户端上验证了表单数据,就可以提交表单了。 并且,由于我们在上一篇文章中介绍了验证,因此我们准备提交! 本文着眼于用户提交表单时会发生什么—数据将流向何处,以及到达表单后如何处理? 我们还将研究与发送表单数据相关的一些安全问题。 先决条件: 基本的计算机知识,对HTML的理解以及HTTP和服务器端编程的基本知识。 目的: 了解提交表单数据...

rbac之 权限粒度控制到按钮级别

rbac之 权限粒度控制到按钮级别:  这里的意思就是 如果当前用户,没有这个权限。 那么这个相对应的这个按钮的权限, 就不应该展示。看都不能给看到。 思路:  为每一个权限,设置一个别名。  这里是这的别名。 要与 路由控制器中的,每条路径的 别名保持一直  模板中每一个按钮标签的位置,进行 if 判断。 判断这个别名是否在当前用户的,权限字典中。 如果...

input上传图片并预览

首先说一下input 大家都知道上传文件,图片是通过input 的file进行上传的。 1. 首先是样式 大家都知道input在HTML的代码为 <input type="file">;在页面的样式是不可以更改的,如下图 但是最为一个投机取巧的前端,一切样式都是可以修改的。 效果图如下 代码: <input type="file...

python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器

相信你已经摸清了 浏览器各种请求的套路 也知道了怎么在手机上进行请求和返回数据的抓取 那么接下来我们就开始来使用 python 了 代码 lu 起来 那么 怎么用 python 写各种请求呢? 今天要给大家介绍的就是 Urllib 这可是 python 内置的库 有了它 我们写代码就轻松了 腰也不疼了 腿也不酸了 头发也不秃了 那么怎么使用Urll...

细说 Form (表单)

细说 Form (表单) 阅读目录 开始 简单的表单,简单的处理方式 表单提交,成功控件 多提交按钮的表单 上传文件的表单 MVC Controller中多个自定义类型的传入参数 F5刷新问题并不是WebForms的错 以Ajax方式提交整个表单 以Ajax方式提交部分表单 使用JQuery,就不要再拼URL了! id, name 有什么关系 使用C#...

『AngularJS』$location 服务

参考: ng.$location Developer Guide: Angular Services: Using $location 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用。改变在地址栏中的URL会作用到$location服务,同样的,改变$location服务也会改...