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文本这种特定环境下使用。

nodejs中使用cheerio爬取并解析html网页的更多相关文章

  1. Python 网络爬虫 006 (编程) 解决下载(或叫:爬取)到的网页乱码问题

    解决下载(或叫:爬取)到的网页乱码问题 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 20 ...

  2. [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息

    [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫   版权声明: ...

  3. nodejs爬虫笔记(三)---爬取YouTube网站上的视频信息

    思路:通过笔记(二)中代理的设置,已经可以对YouTube的信息进行爬取了,这几天想着爬取网站下的视频信息.通过分析YouTube,发现可以从订阅号入手,先选择几个订阅号,然后爬取订阅号里面的视频分类 ...

  4. R中使用rvest爬取数据小试

    总结R中使用 xpath 和 css selectors 获取标签内容(xpath功能强大,而CSS选择器通常语法比较简洁,运行速度更快些) 例:抓取下面标签的内容: <h3 class=&qu ...

  5. 使用nodejs的puppeteer库爬取瓜子二手车网站

    const puppeteer = require('puppeteer'); (async () => { const fs = require("fs"); const ...

  6. 阿狸V任务页面爬取数据解析

    需求: 爬取:https://v.taobao.com/v/content/video 所有主播详情页信息 首页分析 分析可以得知数据是通过ajax请求获取的. 分析请求头 详情页分析 详情页和详情页 ...

  7. Python爬虫初探 - selenium+beautifulsoup4+chromedriver爬取需要登录的网页信息

    目标 之前的自动答复机器人需要从一个内部网页上获取的消息用于回复一些问题,但是没有对应的查询api,于是想到了用脚本模拟浏览器访问网站爬取内容返回给用户.详细介绍了第一次探索python爬虫的坑. 准 ...

  8. 长安铃木经销商爬取(解析xml、post提交、python中使用js代码)

    1.通过火狐浏览器,查找大长安铃木官网中关于经销商的信息主要在两个网页中 http://www.changansuzuki.com/khfw/xml/pro.xml  地域信息 http://www. ...

  9. python中使用tabula爬取pdf数据并导出表格

    Tabula是专门用来提取PDF表格数据的,同时支持PDF导出CSV.Excel格式. 首先安装tabula-py: tabula-py依赖库包括Java.pandas.numpy所以需要保证运行环境 ...

随机推荐

  1. ThreadLocal概述、以及存在的坑

    ThreadLocal: 线程的一个本地化对象.当多线程中的对象使用ThreadLocal维护变量是,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本. threadlocal通常定 ...

  2. 让window10目录支持大小写

    今天用vmware影响文件夹以供linux系统使用,结果宿主机是win10系统,所以用在linux里,大小写变得不敏感. 解决办法也很简单. 管理员模式运行cmd(默认目录是C:\Windows\Sy ...

  3. Mac开源文本编辑器Brackets 快捷操作有哪些?

    Brackets for Mac是一款可靠,直观且易于使用的macOS应用程序,可用作HTML,CSS和JavaScript项目的代码编辑器.如果你能了解更多Mac开源文本编辑器Brackets 快捷 ...

  4. Docker版zabbix

    1. docker-compose docker-compose :容器自带的编排工作,可以通过yaml编排文件,将容器要启动的命令写入文件,然后再利用docker-compose run file. ...

  5. 随笔记录--Array类型

    前言:除了Object类型之外,Array类型恐怕是ECMAScript中最常用的类型了.而且,ECMAScript中数组与其他多数语言中的数组有很大差别,ECMAScript数组中的每一项可以保存任 ...

  6. Beta冲刺(3/7)——2019.5.24

    所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(3/7)--2019.5.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...

  7. jmeter 测试带token的请求

    https://blog.csdn.net/wd1282988143/article/details/88048114 如果有一个登录接口需要服务端返回参数,再带着这个参数去请求才能完成登录,请问jm ...

  8. git 撤销merge

    如果没有别的操作,直接回到上一次提交就可以了,在a分支执行 git reset --hard HEAD~ 会回到未merge前的状态,清空暂存区,销毁数据,如果没有推送到远程,数据就会被覆盖无法恢复, ...

  9. hive中的日期转换函数

    1.unix时间戳转时间函数   语法: from_unixtime(bigintunixtime[, string format]) 返回值: string   说明: 转化UNIX时间戳(从197 ...

  10. 一个Java字符串中到底有多少个字符?

    依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 \u0000 (0),最大值是\uffff(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 ...