NodeJs + Phantomjs 简易爬虫
爬虫是什么?
引用百度百科的说法是:
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
如何在NodeJs上搭建爬虫环境?
-
安装Phantomjs, 这里我们使用一个集成的NodeJS模块,GitHub地址
npm i phantom --save-dev
-
安装Cheerio, Cheerio是一个服务器端基本实现Jquery核心功能的一个库
npm i cheerio --save-dev
好了,现在我们需要的基本环境都有了,如何进行程序编写呢?
-
工欲善其事必先利其器,当然是先准备一个好用的IDE啊!这里我们选择WebStorm.
先使用WebStorm创建一个NodeJS-Express项目,这里我们选择使用EJS模板,如图:
项目创建好以后,修改项目的index.js文件。
-
废话不多说,编写一个简易的爬虫程序。
目的:获取百度首页上所有能匹配 http[s]?://.* 的a标签,因此有:
const express = require('express'); const router = express.Router(); const phantom = require('phantom'); const cheerio = require('cheerio'); /* GET home page. */ router.get('/', function (req, res, next) { res.header('Content-Type', 'application/json'); let sitepage = null; //创建网页对象实例 let phInstance = null; //创建phantomj实例对象 phantom.create() .then(instance => { phInstance = instance; return instance.createPage(); }) .then(page => { sitepage = page; return page.open('https://www.baidu.com/'); }) .then(status => { console.info(status); //获取结果状态 return sitepage.property('content'); //获取相应的属性内容 }) .then(content => { const $ = cheerio.load(content); //解析输出的结果内容 const jsonResult = []; $('a[href]').each((i, item) => { //抓取符合条件的a标签的链接地址 const href = $(item).attr('href'); if (new RegExp(/http[s]?:\/\/.*/).test(href)) { jsonResult.push(href); } }); sitepage.close(); phInstance.exit(); res.json(jsonResult); }) .catch(error => { console.log(error); phInstance.exit(); res.json({status: false}); }); }); module.exports = router;
运行以上代码后,你会看到以下输出:
- 希望你也能成功,**Good Luck! **