Cheerio爬虫

Cheerio爬虫Cheerio 是 Node js 特别为服务端定制的 能够快速灵活的对 JQuery 核心进行实现 它工作于 DOM 模型上 且解析 操作 呈送都很高效 适合各种 Web 爬虫程序 数据源爬虫要想爬取数据首先提供爬取数据的路径 url http www hubwiz com course bc20ce26fhtt xc hubwiz com course bc20ce26f 爬虫目标页面每一章节的标题及其中小节的标题名称 小

爬虫要想爬取数据首先提供爬取数据的路径:

url: http://www.hubwiz.com/course/bc20ce26fhttp://xc.hubwiz.com/course/bc20ce26f 

爬虫目标

页面每一章节的标题及其中小节的标题名称。

小爬虫

首先引用了 nodejs 的核心模块 http 和提供了爬取路径,然后通过 http 中的 get 接口给 url 发送 get 请求,最回调函数中对请求回来的数据进行处理。

爬取数据

通过cheerio的 load 方法把html加载;然后对.panel通过 map 进行遍历。之后我们在 map 中 组装 要数据格式,如上述中chapterData。再对 小节 li 进行遍历,把 section 通过 push 方法 添加到 chapterData.section 的数组中。再把组装好的数据 push 到 我们创建的空数组 data 中。最后通过console.log进行输出。

处理数据

在大多数情况下我们爬取出来的数据,可能不是我们最终想要的东西比如说:数据中空值或者空格等等。在获取在通过 text 获取内容的后面跟随着一个 trim 的方法。这个方法的作用就是处理数据中空格和换行符。

空值的情况,在输出的数据中存在一个空的数组对象,通过 filter 方法去处理它 。

输出数据

crawlerChapter方法中得到的数据 data 组装,进行输出。

printInfo 方法中的参数 data ,这个参数需要 crawlerChapter 方法 returnprintInfo。然后就是 data 参数调用 filter 方法把数据为空的去掉。最后就是把章节拼接字符串进行输出。

参考源码:

var http = require('http'); var cheerio = require('cheerio'); var url = 'http://www.hubwiz.com/course/a032cafddbe/'; http.get(url, function (res) { 
    var html = ''; res.on('data', function (data) { 
   
        html += data; }); res.on('end', function () { 
    var chapter = crawlerChapter(html); printInfo(chapter); }) }).on('error', function () { 
    console.log('爬取页面错误') }); function crawlerChapter(html) { 
    var $ = cheerio.load(html); var chapters = $('.panel'); var data = []; chapters.map(function (node) { 
    var chapters = $(this); var chapterTitle = chapters.find('h4').text().trim(); var sections = chapters.find('li'); var chapterData = { 
    chaptersTitle: chapterTitle, section: [] }; sections.map(function (node) { 
    var section = $(this).text().trim(); chapterData.section.push(section); }); data.push(chapterData); }); return data; } function printInfo(data) { 
    data = data.filter(function filterByID(obj) { 
    return obj.chaptersTitle ? true : false; }); data.map(function (item) { 
    var chapterTitle = item.chaptersTitle; console.log('【' + chapterTitle + '】'); item.section.map(function (section) { 
    console.log(' 【' + section + '】') }) }) } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209468.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:10
下一篇 2026年3月19日 上午9:10


相关推荐

  • ARM 开启Dcache 问题

    ARM 开启Dcache 问题ARM926EJSDca 是依赖于 MMU 只有开启 MMU 后 Dcache 才真正有效 正常情况下 开启 Dcache 可以大大加快 CPU 性能 但是遇到特殊情况则出现很大的问题 有以下三种情况 采用不可缓存代码 采用自修改代码 操作 AHB 总线 采用不可缓存代码与其他 ARM9 系列的缓存内核来比 尽管非缓存代码的性能得到了改善 仍然推荐采用 ICache 这

    2026年3月26日
    3
  • USB转RS485串口电路设计「建议收藏」

    USB转RS485串口电路设计「建议收藏」USB转串口芯片的串口信号一般为TTL/CMOS电平,在实现半双工RS485串口时需要外接485电平转换芯片,设计中需要有信号来控制485转接芯片的发送和接收使能端,建议选择自带485控制引脚的转接芯片(如CH340/CH342系列芯片的TNOW引脚),该引脚默认为低电平,当串口处于发送状态时会自动拉高处于有效状态,发送完成再恢复低电平。同理,可以延伸到其他应用场景,如单片机串口转485电路设计中可以使用GPIO口来控制485转接芯片的发送和接收使能。以MAX485为例:1.DE..

    2022年6月10日
    60
  • 汉字到底占几个字节丨C「建议收藏」

    汉字到底占几个字节丨C「建议收藏」首先需要注意汉字所占字节数,与语言没有关系,是与其使用的字符集的编码方式有关验证方法1.把下面代码保存到一个文本文体中#include#includeintmain(){char*a=”我”;printf(“%d”,strlen(a));return0;}复制代码2.在终端中

    2022年6月26日
    37
  • a 标签中 写页面刷新代码

    a 标签中 写页面刷新代码

    2021年10月7日
    54
  • 随机森林随机选择特征的方法_随机森林步骤

    随机森林随机选择特征的方法_随机森林步骤当你读到这篇博客,那么你肯定知道手动调参是多么的低效。那么现在我来整理一下近几日学习的笔记,和大家一起分享学习这个知识点。

    2022年8月30日
    5
  • 简述python垃圾回收机制_理解Python垃圾回收机制

    简述python垃圾回收机制_理解Python垃圾回收机制一 垃圾回收机制 Python 中的垃圾回收是以引用计数为主 分代收集为辅 引用计数的缺陷是循环引用的问题 在 Python 中 如果一个对象的引用数为 0 Python 虚拟机就会回收这个对象的内存 执行 f1 会循环输出这样的结果 而且进程占用的内存基本不会变动 c1 ClassA 会创建一个对象 放在 0x237cf58 内存中 c1 变量指向这个内存 这时候这个内存的引用计数是 1delc1 后 c1 变量不再

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号