题目描述

搜 索引擎是靠 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 协议——百度之星相关推荐

  1. Robots.txt 协议详解及使用说明

    一.Robots.txt协议 Robots协议,也称为爬虫协议.机器人协议等,其全称为"网络爬虫排除标准(Robots Exclusion Protocol)".网站通过Robot ...

  2. 爬虫君子协议-robots.txt协议

    文章目录 一.定义 二.用法 一.定义 robots协议是一种约定俗称的爬虫协议,由网站主人规定了该网站的哪些内容可以爬取,哪些内容不可以爬取,擅自爬取可能承担相关法律责任.之所以称之为君子协议,是因 ...

  3. 使用Robots.txt引导百度爬虫合理分配抓取资源

    我所在的网站算是一个大型网站,百度收录3000万,每天百度爬虫抓取总次数在500w次左右,单页的百度收录率 80%,看起来已经是一个相当不错的数据,但分析一下详细的日志文件,还是可以发现一些问题, 1 ...

  4. robots.txt文件详解

    我们知道,搜索引擎都有自己的"搜索机器人"(ROBOTS),并通过这些ROBOTS在网络上沿着网页上的链接(一般是http和src链接)不断抓取资料建立自己的数据库. 对于网站管理 ...

  5. 8.认识robots.txt到爬取信息

    文章目录 1.robots协议: 什么是robots.txt: robots.txt内容: robots.txt的作用: robots.txt写法: 文件写法 文件用法 Robot特殊参数: Allo ...

  6. robots.txt介绍

    robots.txt是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被(漫游器)获取的. ...

  7. 怎样写robots.txt实例

    资料一 1.robots.txt文件是什么 robots.txt是一个纯文本文件,是搜索引擎中访问网站的时候要查看的第一个文件.robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的.每 ...

  8. 搜索引擎蜘蛛及网站robots.txt文件详解

    搜索引擎都有自己的"搜索机器人"(ROBOTS),并通过这些ROBOTS在网络上沿着网页上的链接(一般是http和src链接)不断抓取资料建立自己的数据库. 对于网站管理者和内容提 ...

  9. robots.txt文件的解析及过滤

    什么是robots.txt文件? robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不能被搜索引擎 ...

最新文章

  1. js 中的new Image
  2. .Net Discovery系列之十一-深入理解平台机制与性能影响 (中)
  3. 学生创客 开公司造3D打印机
  4. gridview 导出到excel,repeater类似
  5. PAT甲题题解-1050. String Subtraction (20)-水题
  6. 现在是2016-09-23,查询2个月后的月份和入职的月份相同的数据
  7. 小型数字系统---运动码表设计
  8. 浅谈java中extends与implements的区别
  9. canvas动画简单操作
  10. java excel添加公式_Java添加、读取Excel公式
  11. 整个行业都缺Web前端工程师,你还在问Web前端工作好找吗?
  12. mysql建表的字段类型和约束条件
  13. VIM技巧及使用vim开发android应用
  14. MATLAB解微分方程组
  15. html制作作业提交入口,制作网页详细操作步骤
  16. Chrome浏览器乱码问题
  17. Spring Security 自定义资源认证规则
  18. 海贼王java7723_我的世界海贼王模组7723首发版
  19. 2014中国高中排行榜发布 华中师大一附中居首
  20. Emacs footnote 自动排序

热门文章

  1. apache axis 1.4的invoke方法设置超时_Kubernetes 网络故障常见排查方法
  2. c语言经典例题100例
  3. Protobuf语言指南
  4. ios文件连接服务器无法写入,iOS写入数据到文件中
  5. IDEA常用插件整理
  6. kafka 分区分配及再平衡总结
  7. 这可能是最详细的Python文件操作
  8. 利用Linux的强大移植性和兼容性将操作系统轻松安装到硬盘
  9. eclipse下添加viplugin插件的方法
  10. ThinkPHP 3.2 版本升级了哪些内容