node+express制作爬虫教程


Posted in Javascript onNovember 11, 2016

最近开始重新学习node.js,之前学的都忘了。所以准备重新学一下,那么,先从一个简单的爬虫开始吧。

什么是爬虫

百度百科的解释:

爬虫即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。

通俗一点讲:

把别人网站的信息给弄下来,弄到自己的电脑上。然后再做一些过滤,比如筛选啊,排序啊,提取图片啊,链接什么的。获取你需要的信息。

如果数据量很大,而且你的算法又比较叼,并且可以给别人检索服务的话,那么你的爬虫就是一个小百度或者小谷歌了

什么是robots协议

了解完什么是爬虫之后,我们再来了解一下爬虫的协议了,也就是哪些东西才已去爬。

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。 

robots.txt文件是一个文本文件,它是一个协议,而不是一个命令。它是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;

如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。

如果将网站视为酒店里的一个房间,robots.txt就是主人在房间门口悬挂的“请勿打扰”或“欢迎打扫”的提示牌。这个文件告诉来访的搜索引擎哪些房间可以进入和参观,哪些房间因为存放贵重物品,或可能涉及住户及访客的隐私而不对搜索引擎开放。但robots.txt不是命令,也不是防火墙,如同守门人无法阻止窃贼等恶意闯入者。

环境搭建

需要的环境:node环境

需要安装的东西: express、require、cherrio

可以在这里找到模块的用法:https://www.npmjs.com,直接输入模块名字即可,比如:require

1、express这里就不做介绍了,中文网址在这里,可以查看:http://www.expressjs.com.cn/

2、request模块让http请求变的更加简单。最简单的一个示例:

var express = require('express');
var app = express();

app.get('/', function(req, res){
 res.send('hello world');
});

app.listen(3000);

安装:npm install request

3、cherrio 是为服务器特别定制的,快速、灵活、实施的jQuery核心实现。

通过cherrio,我们就可以将抓取到的内容,像使用jquery的方式来使用了。可以点击这里查看:https://cnodejs.org/topic/5203a71844e76d216a727d2e

var cheerio = require('cheerio'),
$ = cheerio.load('<h2 class="title">Hello world</h2>');
$('h2.title').text('Hello there!');

安装:npm install cherrio

爬虫实战

假设你的电脑里已经安装好了node和express。那么我们现在开始进行我们的爬虫小程序:

1、首先随便进入一个硬盘,假如是F盘,cmd环境下执行: express mySpider

然后你发觉你的F盘上多了一个 mySpider的文件夹和一些文件,进入文件,cmd下执行 npm install

2、然后安装我们的require ==》npm installrequire --save 、再安装我们的cherrio==》npm install cherrio --save

3、安装好后,执行npm start,如果想监听窗口的变化,可以执行:supervisor start app.js,然后在浏览器输入:localhost:3000,这样我们就可以在浏览器看到express的一些欢迎语啊什么的

4、打开app.js文件,你会发觉里面有一大堆东西,因为是爬虫小程序嘛,所以都是不需要滴,删,在express的API里有这段代码,粘贴在app.js里面

app.js

var express = require('express');
var app = express();

app.get('/', function(req, res){
 res.send('hello world');
});

app.listen(3000);

5、我们的require登场了。继续修改一下app.js改为:

var express = require('express');
var app = express();
var request = require('request');

app.get('/', function(req, res){
 request('http://www.cnblogs.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    res.send('hello world');
  }
 })
});
app.listen(3000);

其中request的链接就是我们要爬的网址,加入我们要爬的是博客园的网站,所以输入的是博客园的网址

6、引入cherrio,来让我们可以操做爬到的网站的内容,继续修改一下app.js

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

app.get('/', function(req, res){
 request('http://www.cnblogs.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
   //返回的body为抓到的网页的html内容
   var $ = cheerio.load(body); //当前的$符相当于拿到了所有的body里面的选择器
   var navText=$('.post_nav_block').html(); //拿到导航栏的内容
   res.send(navText);
  }
 })
});
app.listen(3000);

我们抓到的内容都返回到了request的body里面。cherrio可以获取所有的dom选择器。假如我们要获取导航的内容:ul的class为:post_nav_block

node+express制作爬虫教程

然后我们就可以将里面的内容显示出来了:

node+express制作爬虫教程

这个说明,我们的爬虫小程序就成功了。当然,这是一个简单的不能再简单的爬虫了。不过今天的文章就暂时介绍到这里,只是大概了解一下爬虫的过程而已。

接下来的第二篇文章会对这个爬虫进行升级,改版。比如异步啦,并发啦,定时去爬啦等等。

代码地址:https://github.com/xianyulaodi/mySpider

Javascript 相关文章推荐
asp(javascript)全角半角转换代码 dbc2sbc
Aug 06 Javascript
jquery 最简单易用的表单验证插件
Feb 27 Javascript
JS插件overlib用法实例详解
Dec 26 Javascript
Bootstrap每天必学之按钮(Button)插件
Apr 25 Javascript
javascript cookie基础应用之记录用户名的方法
Sep 20 Javascript
angular+ionic 的app上拉加载更新数据实现方法
Jan 16 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
Vuepress 搭建带评论功能的静态博客的实现
Feb 17 Javascript
JavaScript使用面向对象实现的拖拽功能详解
Jun 12 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 #Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 #Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 #Javascript
通过扫描二维码打开app的实现代码
Nov 10 #Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 #Javascript
关于json字符串与实体之间的严格验证代码
Nov 10 #Javascript
jquery日历插件e-calendar升级版
Nov 10 #Javascript
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
PHP访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
python动态性强类型用法实例
2015/05/09 Python
Python实现Pig Latin小游戏实例代码
2018/02/02 Python
pandas对指定列进行填充的方法
2018/04/11 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python实现浪漫的烟花秀
2019/01/30 Python
Python转换时间的图文方法
2019/07/01 Python
python之生产者消费者模型实现详解
2019/07/27 Python
python tkinter控件布局项目实例
2019/11/04 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
python小白切忌乱用表达式
2020/05/29 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
python二维图制作的实例代码
2020/12/03 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
厂长助理岗位职责
2013/12/27 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
企业法人授权委托书
2014/04/03 职场文书
班级团队活动方案
2014/08/14 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
mysql中整数数据类型tinyint详解
2021/12/06 MySQL