NodeJs Express 爬取百度新闻

第一步:使用express创建reptile应用

express reptile

第二步:reptile应用依赖的第三方模块(superagent 和cheerio)

superagent:superagent是node里一个非常方便的、轻量的、渐进式的第三方客户端请求代理模块,用他来请求目标页面

cheerio:相当于node版的jQuery,用过jQuery的同学会非常容易上手。它主要是用来获取抓取到的页面元素和其中的数据信息

本地安装第三方模块(superagent 和cheerio)

cnpm install superagent

cnpm install cheerio

编辑package.json

{
  "name": "reptile",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "express": "~4.16.0",
    "http-errors": "~1.6.2",
    "jade": "~1.11.0",
    "morgan": "~1.9.0",
	"superagent": "~4.1.0", #依赖superagent 模块
	"cheerio": "~1.0.0-rc.2" #依赖cheerio 模块
  }
}

第三步:分析百度新闻首页的页面信息:

F12打开Chrome的控制台,审查页面元素,
经过查看左侧“热点新闻”信息所在DOM的结构,
我们发现所有的“热点新闻”信息(包括新闻标题和新闻页面链接)
都在id为#pane-news的<div>下面<ul>下<li>下的<a>标签中。
用jQuery的选择器表示为:#pane-news ul li a

第四步、数据爬取

在reptile/routes/index.js文件中,使用用superagent和cheerio请求目标页面,获取整个新闻首页信息。

var express = require('express');
var router = express.Router();
// 引入所需要的第三方包
var superagent= require('superagent');
// 引入所需要的第三方包
var cheerio = require('cheerio');
let hotNew = [];                                // 热点新闻


/* GET home page. */
router.get('/', function(req, res, next) {
  superagent.get('http://news.baidu.com/').end((err, res) => {
  if (err) {
    // 如果访问失败或者出错,会这行这里
    console.log(`热点新闻抓取失败 - ${err}`)
  } else {
   // 访问成功,请求http://news.baidu.com/页面所返回的数据会包含在res
   // 抓取热点新闻数据
   hotNew = getHotNews(res)
   hotNew.forEach(function(item) {
    console.log(item.title);
	console.log(item.href);
	});
  }
	});
});


/*
	热点新闻抓取
*/

let getHotNews = (res) => {
  let hotNews = [];
  // 访问成功,请求http://news.baidu.com/页面所返回的数据会包含在res.text中。
  
  /* 使用cheerio模块的cherrio.load()方法,将HTMLdocument作为参数传入函数
     以后就可以使用类似jQuery的$(selectior)的方式来获取页面元素
   */
  let $ = cheerio.load(res.text);

  // 找到目标数据所在的页面元素,获取数据
  $('div#pane-news ul li a').each((idx, ele) => {
    // cherrio中$('selector').each()用来遍历所有匹配到的DOM元素
    // 参数idx是当前遍历的元素的索引,ele就是当前便利的DOM元素
    let news = {
      title: $(ele).text(),        // 获取新闻标题
      href: $(ele).attr('href')    // 获取新闻网页链接
    };
    hotNews.push(news)              // 存入最终结果数组
  });
  return hotNews
};

module.exports = router;

第五步:reptile应用安装项目依赖模块和应用启动

cnpm install

cnpm start

爬虫访问地址:http://localhost:3000

控制台输出数据结果如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值