码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • node爬取掘金/csdn文章


    前言

    平常看到一些好的文章,想在个人博客上转发记录一下,一下一下的去copy太麻烦了,因此有了这个想法,能不能通过文章链接,直接取到当前文章,然后放到markdown编辑器里面,这样copy起来不是方便了很多,哈哈哈😄

    csdn文章获取

    需要借助axios和cheerio 库
    这个axios不过多介绍,cheerio是用来分析网页内容,解析html,可以像 jquery 一样操作的一个库

    简化代码如下

    const axios = require("axios");
    const cheerio = require("cheerio");
    // csdn文章地址(地址栏)
    let url =
      "https://blog.csdn.net/m0_49159526/article/details/125400468?spm=1001.2014.3001.5501";
    
    // 获取文章内容
    const getContent = ($) => $("#content_views").html();
    // 获取博客
    const getBlog = async (url) => {
      let { data } = await axios.get(url);
      let $ = cheerio.load(data);
      let articleHtml = getContent($);
      console.log("文章内容html", articleHtml);
    };
    getBlog(url);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    掘金文章获取

    掘金文章的渲染和csdn还有些区别,csdn文章是直接渲染好的,而掘金需要解析文章接口拿到的数据,从中剥离出文章内容并插入到html内
    acorn JavaScript解析器
    markdown-it 借助markdown-it将markdown转html

    const axios = require("axios");
    const cheerio = require("cheerio");
    const acorn = require("acorn");
    const MarkdownIt = require('markdown-it'), md = new MarkdownIt();
    
    let url = "https://juejin.cn/post/7111718092161417229";
    
    axios.get(url).then((res) => {
      const $ = cheerio.load(res.data);
      let str = $("body script")[0].children[0].data;
      let ast = acorn.parse(str, { ecmaVersion: 2020 });
      if (ast) {
        let ps =
          ast.body[0].expression.right.callee.body.body[0].argument.properties;
        let state = ps.find((item) => item.key.name == "state");
        let view = state.value.properties.find((item) => item.key.name == "view");
        let column = view.value.properties.find(
          (item) => item.key.name == "column"
        );
        let entry = column.value.properties.find(
          (item) => item.key.name == "entry"
        );
        let article_info = entry.value.properties.find(
          (item) => item.key.name == "article_info"
        );
        let mark_content = article_info.value.properties.find(
          (item) => item.key.name == "mark_content"
        );
        let result = md.render(mark_content.value.value);
        console.log('文章内容html', result)
      }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    实现效果

    参照上面代码,集成到了自己的网站后台管理系统中,有兴趣的可以注册登录后看下 获取文章
    在这里插入图片描述

    参考

    上述记录,是为了满足我个人网站的需求,也可以直接爬取一些文章到保存为md格式到本地,不多叙述,大家可以参考下
    基于node实现CSDN博客导出为markdown
    如何备份掘金上的博客?用node写个爬虫吧~

  • 相关阅读:
    [python][原创]PIL中polygon参数outline和fill理解
    求求你别在用if进行参数校验了!!!
    typescript47-函数之间的类型兼容性
    大学毕业去什么样的公司工作不后悔?
    自我监督学习日志
    【Android-Jetpack进阶】8、Paging 分页加载、MVVM 架构
    基于intel D4系列深度相机 (D455)的单点测距和两点距离测量(代码讲解超详细)
    Xshell的下载与安装
    基于javaweb的家政服务网站系统设计和实现(java+springboot+ssm+mysql+jsp)
    【Java每日一题】第三十七题:思考应用题(2023.10.23)
  • 原文地址:https://blog.csdn.net/m0_49159526/article/details/125521853
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号