在分析亚马逊的robots协议之前我们先应该明确的是网络爬虫会带来的风险和问题,这样才能更好的理解亚马逊为什么禁止网络爬虫访问这些内容,如果访问的话会造成什么危害。
最简单的robots.txt只有两个规则:
User-agent:指定对哪些爬虫生效
Disallow:指定要屏蔽的网址
接下来以亚马逊的robots协议为例,分析其内容。
首先,先来分析亚马逊对于网络爬虫的限制。是否有有“特殊权限”的爬虫?
爬虫抓取时会声明自己的身份,这就是User-agent,就是http协议里的User-agent。robots.txt利用User-agent来区分各个引擎的爬虫。
*代表该内容下面Disallow的部分是禁止所有爬虫爬取的。因此robots协议中提及的“禁区”是针对于所有网络爬虫的,没有单独提及的爬虫。
与之对应来看,我们会发现淘宝的robots协议中明确禁止百度的网络爬虫爬取。而百度的一些网站是允许百度爬虫任意爬取的。
接下来分析亚马逊向网络爬虫屏蔽的内容有哪些。
Disallow 行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。要屏蔽整个网站,使用正斜线即可;要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线;要屏蔽某个具体的网页,就指出这个网页。
下面代表wishlist中允许访问的目录universal*、 vendor-button* 、get-button*
仔细观察禁止访问,发现了一些“看得懂”的内容:
其中禁止了网络爬虫模仿用户的行为进行诸如给商品评分、发送电子邮件、分享到twitter的行为,这是十分合理的。试想若是不禁止网络爬虫模仿用户的行为,不仅可能会给网站的性能造成影响,可能会出现爬虫造成的恶意评分,以亚马逊名义发送内容无法保证的邮件的事件的发生。这样的行为会对亚马逊的交易环境和形象产生影响。
同时禁止爬虫访问历史、物流信息的请求可以避免用户的交易信息泄露造成麻烦。
下面禁止访问的内容诸如登陆、退出账户,身份,订单地址、详细信息、历史、修改、记录,推荐浏览,浏览量,选择支付方式,选择物流,物流查询,购物车等。
其中的很多禁止爬取的都是已登录的账户才可以访问的内容,若是不禁止网络爬虫进行访问,则可能会出现网络爬虫模拟用户操作进行操作的现象发生,造成用户隐私泄露。
禁止爬虫爬取浏览量,浏览内容,推荐浏览等内容是亚马逊防止信息被爬取后被挪作他用牟利,比如“复制网站”的情况发生。
根据协议,网站管理员可以在网站域名的根目录下放一个robots.txt 文本文件,里面可以指定不同的网络爬虫能访问的页面和禁止访问的页面,指定的页面由 正则表达式 表示。网络爬虫在采集这个网站之前,首先获取到这个文件,然后解析到其中的规则,然后根据规则来采集网站的数据。
注意,这个协议的存在更多的是需要网络爬虫去遵守,而起不到防止爬虫的功能。
互联网上的网页是通过超级链接互相关联起来的,从而形成了网页的网状结构。爬虫的工作方式就像蜘蛛在网上沿着链接爬来爬去,最基本的 流程 可以简化如下:
了解了上面的流程就能发现:对爬虫来说网站非常 被动 ,只有老老实实被抓取的份。
所以,对于网站的管理者来说,就存在这样的需求:
某些路径下是个人隐私或者网站管理使用,不想被搜索引擎抓取,比如说 日本爱情动作片 ;
不喜欢某个搜索引擎,不愿意被他抓取,最有名的就是之前 淘宝不希望被百度抓取 ;
小网站使用的是公用的虚拟主机,流量有限或者需要付费,希望搜索引擎抓的温柔点;
某些网页是动态生成的,没有直接的链接指向,但是希望内容被搜索引擎抓取和索引。
网站内容的所有者是网站管理员,搜索引擎应该尊重所有者的意愿,为了满足以上等等,就需要提供一种网站和爬虫进行沟通的途径,给网站管理员表达自己意愿的机会。有需求就有供应, robots 协议 就此诞生。
京东的Robots协议
百度的Robots协议
上面, *代表所有,/代表根目录
既然网络爬虫在爬取一个网站之前,要先获取到这个文件,然后解析到其中的规则,那么,Robots就必须要有一套通用的语法规则。
最简单的robots.txt只有两条规则:
User-agent:指定对哪些爬虫生效
Disallow:指定要屏蔽的网址
先说User-agent,爬虫抓取时会声明自己的身份,这就是User-agent,没错,就是http协议里的User-agent。robots.txt利用User-agent来区分各个引擎的爬虫,比如说google网页搜索爬虫的User-agent为Googlebot。
可能有读者要问了,我怎么知道爬虫的User-agent是什么?你还可以查 相关搜索引擎的资料 得到官方的数据,比如说百度的爬虫列表是这样的:
Disallow 行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。要屏蔽整个网站,使用正斜线即可;要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线;要屏蔽某个具体的网页,就指出这个网页。
下面介绍一些实例:
或者也可以建一个空文件 "/robots.txt" file。
我们再来结合两个真实的范例来学习一下。先看这个例子:
这个是淘宝网的Robots协议内容,相信你已经看出来了,淘宝网禁止百度的爬虫访问。
再来看一个例子:
这个稍微复杂点,京东有2个目录不希望所有的爬虫来抓。同时,京东完全屏蔽了一淘网的蜘蛛(EtaoSpider是一淘网的蜘蛛)。
sitemap
爬虫会通过网页内部的链接发现新的网页。但是如果没有链接指向的网页怎么办?或者用户输入条件生成的动态网页怎么办?能否让网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页?这就是 sitemap , 最简单的 Sitepmap 形式就是 XML 文件 ,在其中列出网站中的网址以及关于每个网址的其他数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度等等),利用这些信息搜索引擎可以更加智能地抓取网站内容。
新的问题 来了,爬虫怎么知道这个网站有没有提供sitemap文件,或者说网站管理员生成了sitemap,(可能是多个文件),爬虫怎么知道放在哪里呢?
由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里。这就成为robots.txt里的新成员了。
节选一段google robots.txt:
Sitemap: ...
Sitemap: ...
插一句,考虑到一个网站的网页众多,sitemap人工维护不太靠谱,google提供了工具可以自动生成sitemap。
meta tag
其实严格来说这部分内容不属于robots.txt。
robots.txt的初衷是为了让网站管理员管理可以出现在搜索引擎里的网站内容。但是,即使使用 robots.txt文件让爬虫无法抓取这些内容,搜索引擎也可以通过其他方式找到这些网页并将它添加到索引中。例如,其他网站仍可能链接到该网站。因此,网页网址及其他公开的信息(如指向相关网站的链接中的定位文字或开放式目录管理系统中的标题)有可能会出现在引擎的搜索结果中。如果想彻底对搜索引擎 隐身 那咋整呢?答案是:元标记,即meta tag。
比如要完全阻止一个网页的内容列在搜索引擎索引中(即使有其他网站链接到此网页),可使用 noindex 元标记。只要搜索引擎查看该网页,便会看到 noindex 元标记并阻止该网页显示在索引中,这里注意 noindex 元标记提供的是一种逐页控制对网站的访问的方式。
要防止所有搜索引擎将网站中的网页编入索引,在网页的部分添加:
这里的 name取值 可以设置为某个搜索引擎的 User-agent 从而指定屏蔽某一个搜索引擎。
除了noindex外,还有其他元标记,比如说nofollow,禁止爬虫从此页面中跟踪链接。详细信息可以参考Google支持的元标记,这里提一句:noindex和nofollow在 HTML4.01规范 里有描述,但是其他tag的在不同引擎支持到什么程度各不相同,还请读者自行查阅各个引擎的说明文档。
Crawl-delay
除了控制哪些可以抓哪些不能抓之外,robots.txt还可以用来控制爬虫抓取的速率。如何做到的呢?通过设置爬虫在两次抓取之间等待的秒数。这种操作可以进行缓解服务器压力。
表示本次抓取后下一次抓取前需要等待5秒。
注意 : google已经不支持这种方式了,在webmaster tools里提供了一个功能可以更直观的控制抓取速率。
这里插一句题外话,几年前曾经有一段时间robots.txt还支持复杂的参数:Visit-time,只有在visit-time指定的时间段里,爬虫才可以访问;Request-rate:用来限制URL的读取频率,用于控制不同的时间段采用不同的抓取速率。后来估计支持的人太少,就渐渐的废掉了,目前google和baidu都已经不支持这个规则了,其他小的引擎公司貌似 从来都 没有支持过。
网络爬虫:
自动或人工识别robots.txt,再进行内容爬取
约束性:
Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险。
原则:类人行为可以不参考Robots协议。
Robots协议不是什么技术壁垒,而只是一种互相尊重的协议,好比私家花园的门口挂着“闲人免进”,尊重者绕道而行,不尊重者依然可以推门而入。目前,Robots协议在实际使用中,还存在一些问题。
缓存
robots.txt本身也是需要被抓取的,出于效率考虑,一般爬虫不会每次抓取网站网页前都抓一下robots.txt,加上robots.txt更新不频繁,内容需要解析。通常爬虫的做法是先抓取一次,解析后缓存下来,而且是相当长的时间。假设网站管理员更新了robots.txt,修改了某些规则,但是对爬虫来说并不会立刻生效,只有当爬虫下次抓取robots.txt之后才能看到最新的内容。尴尬的是,爬虫下次抓取robots.txt的时间并不是由网站管理员控制的。当然,有些搜索引擎提供了web工具可以让网站管理员通知搜索引擎那个url发生了变化,建议重新抓取。注意,此处是建议,即使你通知了搜索引擎,搜索引擎何时抓取仍然是不确定的,只是比完全不通知要好点。至于好多少,那就看搜索引擎的良心和技术能力了。
ignore
不知是无意还是有意,反正有些爬虫不太遵守或者完全忽略robots.txt,不排除开发人员能力的问题,比如说根本不知道robots.txt。另外,本身robots.txt不是一种强制措施,如果网站有数据需要保密,必需采取技术措施,比如说:用户验证,加密,ip拦截,访问频率控制等。
恶意爬虫
在互联网世界中,每天都有不计其数的爬虫在日夜不息地爬取数据,其中恶意爬虫的数量甚至高于非恶意爬虫。遵守Robots协议的爬虫才是好爬虫,但是并不是每个爬虫都会主动遵守Robots协议。
恶意爬虫可以带来很多潜在威胁,比如电商网站的商品信息被爬取可能会被竞争对手利用,过多的爬虫还会占用带宽资源、甚至导致网站宕机。
你学会了吗~~~?
点个赞吧!!!
问题一:Google和百度的爬虫是用什么语言写的? 15分 每个网站都有一个“爬虫协议”,至少大型网站都会有。
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
越是大型网站,Robots协议越规范,他们为了提高自己在搜索结果的位置,会针对百度、谷歌等搜素引擎写爬虫协议,而百度等搜索引擎不需要特别针对这些大网站写协议换个角度想,大的搜索引擎就那几个,而所谓“大网站”数不胜数,怎么可能写的过来?
如果你没能理解这部分内容,说明你还处在“菜鸟”级别。一般的爬虫算法是:先查找新地址,用队列或者堆栈来存储新增加的url;然后用爬虫程序从队列或者堆栈中取地址,继续爬虫。因为这两方面程序执行的速度是不一样的,不是说找到一个url就能立即爬完,或者有时候还没找到新url就已经爬完了,所以分了两个结构。
一般的程序中都会用多个函数来执行一个过程,但这在新手的学习中是不常见到、也是不易搞懂的。
鉴于你提出的问题,我觉得你不到能搞通爬虫程序的阶段,建议你还是从简单的程序开始。看看这个编程语言入门经典100例【Python版】,希望对你有帮助
问题二:百度他们公司 那建立索引 做爬虫这些的用什么语言? 实现搜索引擎核心算法 用什么语言啊? 爬虫什么耿言都可以写 拆解出来 主要就两部分
一部分是获取HTML
另一部分是正则表达式
这要有这两部分就能从网页上爬出有用的信息来了
至于多线程、OCR、分布式任务要根据你抓取站点的目标来做,并非是必须的
问题三:一般公司做爬虫采集的话常用什么语言 C# python
工具 phantomjs casperjs
问题四:请详细解释什么事百度爬虫,有什么作用 说通俗一点就是一段程序,这段程序可以在互联网上自动查询更新的网站
问题五:网络爬虫用什么语言好 爬虫好像很多语言都有,java,C#,python等等。我自己用的是python.
问题六:开发网络爬虫用什么语言比较好 python虽然我没用过,但是这个应嘎是最好的
问题七:网络爬虫用什么语言什么方式实现好 首先取决于目的 如果是一个站点,单一目的,用习惯的语言写吧,学别的语言用的时间都够重构两遍的了。 如果是有100左右的站点,做个框架,把你的爬虫管理起来,比起怎么写更重要。 用Java写过,语言笨重,所建立的数据模型的任何修改都会导致代
问题八:爬虫web软件 用什么开发语言最好 你可以试试用【神箭手云爬虫】写爬虫,
完全在云上编写和执行爬虫,不需要配置任何开发环境,快速开发快速实现。
官网上有不少网站的爬虫源码分享
还有专门的开发者文档,里面的教程很详细,各种基本爬虫基础和进阶开发知识都有介绍。
爬虫编辑器:
神箭手云爬虫开发平台:
问题九:各种语言写网络爬虫有什么优点缺点 我用 PHP 和 Python 都写过爬虫和正文提取程序。
最开始使用 PHP 所以先说说 PHP 的优点:
1.语言比较简单,PHP 是非常随意的一种语言。写起来容易让你把精力放在你要做的事情上,而不是各种语法规则等等。
2.各种功能模块齐全,这里分两部分:
1.网页下载:curl 等扩展库;
2.文档解析:dom、xpath、tidy、各种转码工具,可能跟题主的问题不太一样,我的爬虫需要提取正文,所以需要很复杂的文本处理,所以各种方便的文本处理工具是我的大爱。;
总之容易上手。
缺点:
1.并发处理能力较弱:由于当时 PHP 没有线程、进程功能,要想实现并发需要借用多路服用模型,PHP 使用的是 select 模型。实现其来比较麻烦,可能是因为水平问题我的程序经常出现一些错误,导致漏抓。
再说说 Python:
优点:
1.各种爬虫框架,方便高效的下载网页;
2.多线程、进程模型成熟稳定,爬虫是一个典型的多任务处理场景,请求页面时会有较长的延迟,总体来说更多的是等待。多线程或进程会更优化程序效率,提升整个系统下载和分析能力。
3.GAE 的支持,当初写爬虫的时候刚刚有 GAE,而且只支持 Python ,利用 GAE 创建的爬虫几乎免费,最多的时候我有近千个应用实例在工作。
缺点:
1.对不规范 HTML 适应能力差:举个例子,如果一个页面里面同时有 GB18030 字符集的中文和 UTF-8 字符集的中文,Python 处理起来就没有 PHP 那么简单,你自己需要做很多的判断工作。当然这是提取正文时的麻烦。
Java 和 C++ 当时也考察过,相对脚本语言比较麻烦,所以放弃。
总之,如果开发一个小规模的爬虫脚本语言是个各方面比较有优势的语言。如果要开发一个复杂的爬虫系统可能 Java 是个增加选项, C++ 我感觉写个模块之类的更加适合。对于一个爬虫系统来说,下载和内文解析只是基本的两个功能。真正好的系统还包括完善的任务调度、监控、存储、页面数据保存和更新逻辑、排重等等。爬虫是一个耗费带宽的应用,好的设计会节约大量的带宽和服务器资源,并且好坏差距很大。
问题十:爬虫技术 什么编程语言 爬虫的主要原理是抓取html的内容,大部分目前常见的语言都有相关的网络编程API,都能实现网络爬虫。比如说Java, Python, C++, C#, PHP, Perl等语言都可以。
希望对你有所帮助!
支持。360搜索支持善意的搜索引擎Robots协议。可通过在网站根目录下放置Robots.txt文件,360搜索爬虫不收录网站的全部或部分内容。
友情声明:本文内容由用户自发奉献,本站文章量较多,不能保证每篇文章的绝对合法性,若您发觉违规/侵权内容,请尽快联系我们删除。