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 协议——百度之星相关推荐
- Robots.txt 协议详解及使用说明
一.Robots.txt协议 Robots协议,也称为爬虫协议.机器人协议等,其全称为"网络爬虫排除标准(Robots Exclusion Protocol)".网站通过Robot ...
- 爬虫君子协议-robots.txt协议
文章目录 一.定义 二.用法 一.定义 robots协议是一种约定俗称的爬虫协议,由网站主人规定了该网站的哪些内容可以爬取,哪些内容不可以爬取,擅自爬取可能承担相关法律责任.之所以称之为君子协议,是因 ...
- 使用Robots.txt引导百度爬虫合理分配抓取资源
我所在的网站算是一个大型网站,百度收录3000万,每天百度爬虫抓取总次数在500w次左右,单页的百度收录率 80%,看起来已经是一个相当不错的数据,但分析一下详细的日志文件,还是可以发现一些问题, 1 ...
- robots.txt文件详解
我们知道,搜索引擎都有自己的"搜索机器人"(ROBOTS),并通过这些ROBOTS在网络上沿着网页上的链接(一般是http和src链接)不断抓取资料建立自己的数据库. 对于网站管理 ...
- 8.认识robots.txt到爬取信息
文章目录 1.robots协议: 什么是robots.txt: robots.txt内容: robots.txt的作用: robots.txt写法: 文件写法 文件用法 Robot特殊参数: Allo ...
- robots.txt介绍
robots.txt是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被(漫游器)获取的. ...
- 怎样写robots.txt实例
资料一 1.robots.txt文件是什么 robots.txt是一个纯文本文件,是搜索引擎中访问网站的时候要查看的第一个文件.robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的.每 ...
- 搜索引擎蜘蛛及网站robots.txt文件详解
搜索引擎都有自己的"搜索机器人"(ROBOTS),并通过这些ROBOTS在网络上沿着网页上的链接(一般是http和src链接)不断抓取资料建立自己的数据库. 对于网站管理者和内容提 ...
- robots.txt文件的解析及过滤
什么是robots.txt文件? robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不能被搜索引擎 ...
最新文章
- js 中的new Image
- .Net Discovery系列之十一-深入理解平台机制与性能影响 (中)
- 学生创客 开公司造3D打印机
- gridview 导出到excel,repeater类似
- PAT甲题题解-1050. String Subtraction (20)-水题
- 现在是2016-09-23,查询2个月后的月份和入职的月份相同的数据
- 小型数字系统---运动码表设计
- 浅谈java中extends与implements的区别
- canvas动画简单操作
- java excel添加公式_Java添加、读取Excel公式
- 整个行业都缺Web前端工程师,你还在问Web前端工作好找吗?
- mysql建表的字段类型和约束条件
- VIM技巧及使用vim开发android应用
- MATLAB解微分方程组
- html制作作业提交入口,制作网页详细操作步骤
- Chrome浏览器乱码问题
- Spring Security 自定义资源认证规则
- 海贼王java7723_我的世界海贼王模组7723首发版
- 2014中国高中排行榜发布 华中师大一附中居首
- Emacs footnote 自动排序