美文网首页Java 核心技术Node.jsNode.js
NodeJs + Phantomjs 简易爬虫

NodeJs + Phantomjs 简易爬虫

作者: Cosecant | 来源:发表于2018-01-24 11:21 被阅读76次

    NodeJs + Phantomjs 简易爬虫

    爬虫是什么?

    引用百度百科的说法是:

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
    

    如何在NodeJs上搭建爬虫环境?

    1. 安装Phantomjs, 这里我们使用一个集成的NodeJS模块,GitHub地址

      npm i phantom --save-dev
      
    2. 安装Cheerio, Cheerio是一个服务器端基本实现Jquery核心功能的一个库

      npm i cheerio --save-dev
      

    好了,现在我们需要的基本环境都有了,如何进行程序编写呢?

    1. 工欲善其事必先利其器,当然是先准备一个好用的IDE啊!这里我们选择WebStorm.

      先使用WebStorm创建一个NodeJS-Express项目,这里我们选择使用EJS模板,如图:

      TIM截图20180124110558.png

      项目创建好以后,修改项目的index.js文件。

    2. 废话不多说,编写一个简易的爬虫程序。

      目的:获取百度首页上所有能匹配 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;
      

      运行以上代码后,你会看到以下输出:

      TIM截图20180124111631.png
    1. 希望你也能成功,**Good Luck! **

    相关文章

      网友评论

        本文标题:NodeJs + Phantomjs 简易爬虫

        本文链接:https://www.haomeiwen.com/subject/ryayaxtx.html