node中使用cheerio爬取并解析html网页

cheerio用于node环境,用法与语法都类似于jquery。jquery本身也可以用于node,在借助于第三方库jsdom的情况下,详见:https://www.npmjs.com/package/jquery

安装

npm install cheerio

使用

const cheerio = require('cheerio')
const $ = cheerio.load('

Hello world

') $('h2.title').text('Hello there!') $('h2').addClass('welcome') $.html() //=>

Hello there!

运用

场景

取出这个网址中的文章列表:https://support.fcoin.com/hc/zh-cn/sections/360000782633-最新公告

分析html源码

重点关注class="article-list-link"的,提取它里attr属性与text内容,就算完成目标了。

代码与注释说明
var request = require('request')
const cheerio = require('cheerio')

var http = (uri) => {
  return new Promise((resolve, reject) => {
    request({
      uri: uri,
      method: 'GET'
    }, (err, response, body) => {
      if (err) {
        console.log(err)
      }
      resolve(body)
    })
  })
}

(function () {
  // 定义目标网址
  var target = 'https://support.fcoin.com/hc/zh-cn/sections/360000782633-%E6%9C%80%E6%96%B0%E5%85%AC%E5%91%8A'
  // 使用request.js库发送get请求
  http(target).then(html => {
    // 载入并初始化cheerio
    const $ = cheerio.load(html)
    // 取出目标节点,即带article-list-link css类的
    var linksDom = $('a.article-list-link')
    // 遍历dom集数组
    linksDom.each((index, item) => {
      // 取出title,注意这里使用了$(item),而不是item本身
      var title = $(item).text()
      // 类似地,取出链接地址
      var url = $(item).attr('href')
      // 解码可选,为了让结果显示中文汉字更直观
      url = decodeURIComponent(url)
      // 由于href使用的是相对于根目标的路径,因而从目标网址中提取域名前缀拼接上
      url = target.match(/(\w+:\/\/[^/:]+)([^# ]*)/)[1] + url
      // 输出到控制台预览结果
      console.log(title)
      console.log(url)
    })
  })
})()

预览结果

result.png

对比说明

相比纯正则表达式解析,使用cheerio轻松,语义也清晰,特别适合html文本这种特定环境下使用。

mp

你可能感兴趣的:(node中使用cheerio爬取并解析html网页)