总结:
''' 补充: 爬虫伦理: 就像是两个人在来来往往的相处中,会考虑对方的感受;在互联网的世界中,我们也要考虑一下服务器对爬虫的感受是怎样的。 我们说过,服务器其实就是一个超级电脑,拥有这个服务器的公司,对爬虫其实也有明确的态度。 通常情况下,服务器不太会在意小爬虫,但是,服务器会拒绝频率很高的大型爬虫和恶意爬虫,因为这会给服务器带来极大的压力或伤害。 不过,服务器在通常情况下,对搜索引擎是欢迎的态度(刚刚讲过,谷歌和百度的核心技术之一就是爬虫)。 当然,这是有条件的,通常这些条件会写在robots协议里。 robots协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(robots exclusion protocol), 这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。 我们使用robots协议的场景通常是:看到想获取的内容后,检查一下网站是否允许爬取。 因此我们只需要能找到、简单读懂robots协议就足够了。 我们截取了一部分淘宝的robots协议(http://www.taobao.com/robots.txt), 可以看到淘宝对百度和谷歌这两个爬虫的访问规定,以及对其它爬虫的规定。 User-agent: Baiduspider # 百度爬虫 Allow: /article # 允许访问 article Allow: /oshtml # 允许访问 oshtml Allow: /ershou # 允许访问 ershou Allow: /$ # 允许访问根目录,即淘宝主页 Disallow: /product/ # 禁止访问product文件夹下面的所有文件,但是product文件夹本身允许被访问 Disallow: / # 禁止访问除 Allow 规定页面之外的其他所有页面 User-Agent: Googlebot # 谷歌爬虫 Allow: /article Allow: /oshtml Allow: /product # 允许访问product文件夹及product文件夹下面的所有文件 Allow: /spu Allow: /dianpu Allow: /oversea Allow: /list Allow: /ershou Allow: /$ Disallow: / # 禁止访问除 Allow 规定页面之外的其他所有页面 …… # 文件太长,省略了对其它爬虫的规定,想看全文的话,点击上面的链接 User-Agent: * # 其他爬虫 Disallow: / # 禁止访问所有页面 可以看出robots协议是“分段”的,每个段落都含有以下两种字段: 一种是User-agent:, 另一种是Allow:或Disallow: User-agent表示的是爬虫类型,上面的示例代码注释了“百度爬虫”和“谷歌爬虫”, 我们自己写的爬虫一般要看User-Agent: *,*指向所有未被明确提及的爬虫。 Allow代表允许被访问,Disallow代表禁止被访问。字段对应的值都含有路径分隔符/, 限制了哪些或哪一层目录的内容是允许或者禁止被访问的。 可以对比上述百度爬虫Disallow: /product/和谷歌爬虫Allow: /product的注释行理解一下。 比如淘宝禁止其他爬虫访问所有页面,也就是说,我们自己写的爬虫不被欢迎爬取www.taobao.com域名下的任何网页。 有趣的是,淘宝限制了百度对产品页面的爬虫,却允许谷歌访问。 所以,当你在百度搜索“淘宝网”时,会看到下图的这两行小字。 由于该网站的robots.txt文件存在限制指令(限制搜索引擎抓取), 系统无法提供该页面的内容描述 - 了解详情 因为百度很好地遵守了淘宝网的robots.txt协议,自然,你在百度中也查不到淘宝网的具体商品信息了。 互联网并非法外之地,和爬虫相关的法律也在建立和完善之中,目前通用的伦理规范就是robots协议,我们在爬取网络中的信息时,应该有意识地去遵守这个协议。 网站的服务器被爬虫爬得多了,也会受到较大的压力,因此,各大网站也会做一些反爬虫的措施。不过呢,有反爬虫,也就有相应的反反爬虫,这些我们会在后面关卡中会详细说。 爬虫就像是核技术,人们可以利用它去做有用的事,也能利用它去搞破坏。 恶意消耗别人的服务器资源,是一件不道德的事,恶意爬取一些不被允许的数据,还可能会引起严重的法律后果。 工具在你手中,如何利用它是你的选择。当你在爬取网站数据的时候,别忘了先看看网站的robots协议是否允许你去爬取。 同时,限制好爬虫的速度,对提供数据的服务器心存感谢,避免给它造成太大压力,维持良好的互联网秩序,也是我们该做的事 有的同学可能就要问了:“域名是什么?域名和URL(网址)有什么关系?”很敏锐哟! 我们前面说过,如果把一个网页类比为一幢房子,URL指示了网页的地址, 就像房子在地球上的详细到某某街道某某号的具体地址,那么域名就像房子所在的国家,指示了网站的地址。 如果我们看到一个网页,想爬上面的内容,怎么找到它的URL我们刚刚学过了, 如果网页的URL是https://pypi.org/project/requests/,那么,此网站的域名是pypi.org; 如果网页的URL是http://cn.python-requests.org/zh_CN/latest/,那么网站的域名是cn.python-requests.org。 我们再来看一个, 如果网页的URL是https://www.taobao.com/markets/3c/tbdc?spm=a21bo.2017.201867-main.11.5af911d9VV8EyS, 那么网站的域名是www.taobao.com。 '''
