这篇文章上次修改于 298 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

了解Robots协议、实现简单的爬虫

Robots协议

Robots协议也叫robots.txt,是一种放在网站根目录下ASCLL编码的文本文件,他规定了搜索引擎的漫游器(也称网络蜘蛛),网站上的那些内容允许被爬取,哪些内容不被爬取。

每个搜索引擎可形象为一个网络蜘蛛(爬虫)

什么时候起作用?

网络蜘蛛去访问网站时,会先判断该站点有无robots.txt文件,如果存在,网络蜘蛛就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的网络蜘蛛将能够访问网站上所有没有被口令保护的页面,相当于一个爬取规则。

基本爬取流程

1、 给爬虫一个URL库,称之为 种子(Seeds);
2、 爬虫爬取 Seeds,分析 HTML 网页,抽取其中的 超链接
3、 爬虫接着爬取这些 新发现 的超链接指向的 HTML 网页;
4、 对过程 2,3循环往复

协议作用

Robots协议 主要功能 为以下 4 项:

1、 网站通过该协议告诉搜索引擎哪些页面可以抓取,哪些页面不能;
2、 可以屏蔽一些网站中比较大的文件,如:图片,音乐,视频等,节省服务器带宽;
3、 可以屏蔽站点的一些死链接,方便搜索引擎抓取网站内容;
4、 设置网站地图导向,方便引导蜘蛛爬取页面;

如果一个站点没有引入 Robots 协议,那么爬虫就会漫无目地爬取,爬取结果一般不尽人意。反之,将我们站点内容通过 Robots 协议表述出来并引入 Robots 协议,爬虫就会按照我们的意愿进行爬取。

协议原则

Robots 协议是国际互联网界通行的 道德规范,基于以下 原则 建立:

1、搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权;
2、网站有义务保护其使用者的个人信息和隐私不被侵犯;

协议表述

常用表述

  • User-agent:搜索引擎种类

    • Baiduspider(百度)、Googlebot(谷歌)、Sogou web spider(搜狗)、360Spider(360).......
  • Disallow: 禁止爬虫爬取的内容
  • Allow:允许爬虫爬取的内容(基本用不上)

eg:

User-agent: *                           # *代表所有的搜索引擎种类,是一个通配符
Disallow: /admin/                       # 禁止抓取admin目录下面的目录
Disallow: /require/                     # 禁止抓取require目录下面的目录
Disallow: /static/                      # 禁止抓取static目录下面的目录
Disallow: /cgi-bin/*.htm                # 禁止抓取/cgi-bin/目录下的所有以".htm"为后缀的URL(包含子目录)。
Disallow: /*?*                          # 禁止抓取网站中所有包含问号 (?) 的网址
Disallow: /.jpg$                        # 禁止抓取网站中所有的.jpg格式的图片
Disallow: /public/404.html              # 禁止爬取public文件夹下面的404.htm文件。
Allow: /home/                          # 允许抓取home目录下面的目录
Allow: /home                            # 允许抓取home的整个目录
Allow: .htm$                            # 允许抓取以".htm"为后缀的URL。
Allow: .gif$                            # 允许抓取gif格式图片
Sitemap: http://你的网址/map.xml          # 建议加入xml格式的文件,这个是谷歌标准格式
Sitemap: http://你的网址/map.html         # 建议加入html格式的文件,这个是百度标准格式

例如百度的www.baidu.com的Robots的协议内容(举一条)

......
......
User-agent: Googlebot    
Disallow: /baidu          
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
......
......

实现简单的爬虫

需要安装三个依赖包

npm i express cheerio request --save-dev

cheerio

cheerio是nodejs的抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现。适合各种Web爬虫程序。(相似的语法、快、灵活)

request

请求被设计为进行http调用的最简单方法。它支持HTTPS,默认情况下遵循重定向。可以帮助我们获取请求的HTML脚本

在建一个入口app.js文件,实现简单的爬取页面上的文章总数

const express = require('express');
const request = require('request');
const cheerio = require('cheerio');
const app = express();

app.get('/', (req, res, next) => {
  request('https://www.xiaoliua.com', function (error, response, body) {
    if(!error && response.statusCode === 200) {
      $ = cheerio.load(body);
      // 响应博客首页显示文章数目
      res.json({
        'articleNum': $('.post-item').length
      });
    }
  });
})

app.listen(8080, () => {
  console.log('Server Running......');
})

终端运行

node app.js

最后浏览器访问http://localhost:8080,页面显示服务器响应结果

{"articleNum":6}

这只是一个极其简单的爬虫实践,了解即可~~~