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

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

安装

npm install cheerio

使用

const cheerio = require('cheerio')
const $ = cheerio.load('<h2 class="title">Hello world</h2>') $('h2.title').text('Hello there!')
$('h2').addClass('welcome') $.html()
//=> <html><head></head><body><h2 class="title welcome">Hello there!</h2></body></html>

运用

场景

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

分析html源码

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

<ul class="article-list">

            <li class="article-list-item ">

              <a href="/hc/zh-cn/articles/360006803454-FT%E9%A2%84%E5%85%88%E5%8F%91%E8%A1%8C%E9%83%A8%E5%88%86%E5%AE%9E%E8%A1%8C-%E8%A7%A3%E5%86%BB%E5%8D%B3%E9%94%81%E4%BB%93-%E5%8E%9F%E5%88%99%E7%9A%84%E5%85%AC%E5%91%8A" class="article-list-link">FT预先发行部分实行“解冻即锁仓”原则的公告</a>
</li> <li class="article-list-item "> <a href="/hc/zh-cn/articles/360006823933-%E5%85%B3%E4%BA%8EFInsur%E8%BF%90%E4%BD%9C%E6%9C%BA%E5%88%B6%E7%9A%84%E4%B8%80%E7%B3%BB%E5%88%97%E8%AF%B4%E6%98%8E" class="article-list-link">关于FInsur运作机制的一系列说明</a>
</li>
...
代码与注释说明
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类的<a>
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文本这种特定环境下使用。

最新文章

  1. 每个部门绩效成绩第二名 sql server 查询 ( 替代 not in )
  2. CountUp.js – 让数字以非常有趣的动画方式显示
  3. HTTPS强制安全策略-HSTS协议阅读理解
  4. LeetCode OJ 题解
  5. linux rm 命令
  6. wireshark总结
  7. vijosP1567子串计数
  8. python文件_目录
  9. oracle RAC搭建中的潜规则 该死的app
  10. FusionCharts导出图表常见问题(FAQ)汇总---FusionCharts常见问题大全
  11. BUGKU-逆向(reverse)-writeup
  12. cocos-2dx 3.17 环境搭建 与 新建工程
  13. 未能加载文件或程序集System.Web.Http.WebHost
  14. 【python027--集合】
  15. simhash
  16. Git:常用命令(一)
  17. [20] 鼓状物(Drum)图形的生成算法
  18. 史上最全的MonkeyRunner自动化测试从入门到精通(3)
  19. mysqlbinlog初识
  20. PowerDesigner 生成的脚本取掉双引号

热门文章

  1. Hadoop-HA集群搭建-rehl7.4
  2. ArcGIS 生成要素轮廓线掩膜
  3. python基础笔记-字符串
  4. 20180414模拟赛T2——拼图
  5. scala中可以执行外部命令Process
  6. springBoot 日志中关于profiles设置的源码解读
  7. js生成随机密码,密码位数自定
  8. ssh ssm ssi 服务器平台架构
  9. ID 迭代加深搜索 模板 埃及分数
  10. 强大的接口调试工具-Postman图文详解