[前端js] 爬取亿图脑图大纲
这段程序使看到了好的东西,又没有零钱的产物
还是老师让画思维导图我不想画还想白嫖的想法
用时20分钟
就拿这个来作为例子 https://mm.edrawsoft.cn/template/286842
1. 找到一个突破点
我看了网络,没有接口,没办法偷懒
思维导图是canvas渲染的,我也懒得找数据从哪里来的,所以就只有大纲了
function getOutline(node) {
let info = {child: []};
info.title = $(node).children(".ed-outline-title").find("span").text();
$(node).children(".ed-outline").each(function (index, ele) {
info.child.push(getOutline(ele));
});
return info;
}
// 运行
// 里面是jquery的css选择器,选择的是大纲的节点
getOutline($("#app > div > div > div:nth-child(4) > div.ed-outline.ed-outline--top").get(0))
这会生成一个Json
{
"child": [
{
"child": [
{
"child": [],
"title": "没有孩子的三级"
},
{
"child": [],
"title": "没有孩子的三级"
}
],
"title": "有孩子的二级"
},
{
"child": [],
"title": "没有孩子的二级"
}
],
"title": "一级"
}
有了json,怎么转化为思维导图呢?
用markmap!
2. json转markdown生成思维导图
先做json转markdown,很简单
function toMarkdown(data, depth=0) {
let markdownStr = "";
data.title = data.title.replace(/[(\r\n)(\n)]/g,"<br/>");
if(data.title=="") {
// 有的标题不对劲,会干扰markmap的生成
data.title = " ";
}
markdownStr += " ".repeat(depth)+"- "+data.title+"\n";
for (let i in data.child) {
markdownStr += toMarkdown(data.child[i], depth+1);
}
return markdownStr;
}
在markdown里,换行能引起各种各样的错误,所以我将每一层的文字的换行符替换成<br/>
接下来是生成思维导图
试用: https://markmap.js.org/repl
源码: https://github.com/markmap/markmap
把刚才的那一段示例生成为markdown
- 一级
- 有孩子的二级
- 没有孩子的三级
- 没有孩子的三级
- 没有孩子的二级
打开网址,将markdown填入文本框
非常完美,这样子给老师交差就方便了
好了完整代码放到这里, 要是有变化我也不管啦, 我已经和老师交差了
(function () {
function getOutline(node) {
let info = {child: []};
info.title = $(node).children(".ed-outline-title").find("span").text();
$(node).children(".ed-outline").each(function (index, ele) {
info.child.push(getOutline(ele));
});
return info;
}
function toMarkdown(data, depth=0) {
let markdownStr = "";
data.title = data.title.replace(/[(\r\n)(\n)]/g,"<br/>");
if(data.title=="") {
// 有的标题不对劲,会干扰markmap的生成
data.title = " ";
}
markdownStr += " ".repeat(depth)+"- "+data.title+"\n";
for (let i in data.child) {
markdownStr += toMarkdown(data.child[i], depth+1);
}
return markdownStr;
}
let outlineBox = $("#app > div > div > div:nth-child(4) > div.ed-outline.ed-outline--top").get(0);
let copyBtn = $(`<button style="position:absolute;">复制思维导图markdown</button>`);
copyBtn.css({
"top": $(outlineBox).offset().top+"px",
"right": "0px"
});
copyBtn.click(function () {
navigator.clipboard.writeText(toMarkdown(getOutline(outlineBox)));
});
$("body").append(copyBtn);
})();
阅读了源码,发现有更简单的方法
这是一个Object,里面存着所有的东西
window.__NUXT__.state["active-work"]
大纲请看对象的下的outlines
svg文件和预览图请看对象下的config
更加详细的信息看workInfo
还有评论等等的都在这个里面
还有,workInfo里有一个链接,我总感觉可以直接下载到emmx文件
我已经被学校燃尽了,以后有缘我再研究
[前端js] 爬取亿图脑图大纲的更多相关文章
- 前端js 爬取 获取网页
1.存在问题 same origin policy(同源策略) 页面中的Javascript只能读取,访问同域的网页.这里需要注意的是,Javascript自身的域定义和它所在的网站没有任何关系,只和 ...
- node.js爬取数据并定时发送HTML邮件
node.js是前端程序员不可不学的一个框架,我们可以通过它来爬取数据.发送邮件.存取数据等等.下面我们通过koa2框架简单的只有一个小爬虫并使用定时任务来发送小邮件! 首先我们先来看一下效果图 差不 ...
- JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One
JavaScript 高级程序设计 (第4版) 思维导图/脑图 All In One JavaScript 高级程序设计 (第4版) 思维导图下载 JavaScript 高级程序设计 (第4版) 脑图 ...
- python爬虫爬取天气数据并图形化显示
前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...
- node.js爬取ajax接口数据
爬取页面数据与爬取接口数据,我还是觉得爬取接口数据更加简单一点,主要爬取一些分页的数据. 爬取步骤: 1.明确目标接口地址,举个例子 : https://www.vcg.com/api/common/ ...
- Node.js爬取豆瓣数据
一直自以为自己vue还可以,一直自以为webpack还可以,今天在慕课逛node的时候,才发现,自己还差的很远.众所周知,vue-cli基于webpack,而webpack基于node,对node不了 ...
- 深夜,我用python爬取了整个斗图网站,不服来斗
QQ.微信斗图总是斗不过,索性直接来爬斗图网,我有整个网站的图,不服来斗. 废话不多说,选取的网站为斗图啦,我们先简单来看一下网站的结构 网页信息 从上面这张图我们可以看出,一页有多套图,这个时候我们 ...
- Python学习笔记(五十)爬虫的自我修养(三)爬取漂亮妹纸图
import random import urllib from urllib import request import os ################################### ...
- PHP 结合前端 ajax 爬取网站信息后, 向指定用户发送指定短信;
<?php /** * Description * @authors Your Name (you@example.org) * # 根据时时彩的最新一期的号码, 判断如果为首尾同号则发送短信 ...
- Python爬虫入门教程 13-100 斗图啦表情包多线程爬取
斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...
随机推荐
- drf-视图集、路由系统、action装饰器
1.9个视图扩展类 1.两个视图基类:APIView.GenricAPIView 2.5个视图扩展类:CreateModelMixin,UpdateModelMixin,RetrieveModelMi ...
- DBSCAN学习笔记
基本概念 核心点:若某个点的密度达到算法设定的阈值,即ε-邻域内点的数量(包括自己)不小于minPts,则该点为核心点. 边界点:在ε-邻域内点的数量小于minPts,但是落在核心点邻域内的点. 噪声 ...
- JavaScript 、三个点、 ...、点点点 是什么语法
笔者在学习ts函数式的时候见到这样的写法,这个语法是es6的扩展运算符,可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开:还可以在构造字面量对象时, 将对象表达式按key-va ...
- 关于联想对Jim博士的质疑
对Jim博士质疑的质疑 因为关注司马南,从他的空间里看到Jim博士和其龃龉,大致看了Jim博士头条里的文章,因为看到自己常用的EPICS,上午匆忙就写了上面的文. Jim博士是去年在头条上看到的,因为 ...
- NETAPP硬盘更换
netapp硬盘新增 一.找到坏盘,插上新盘# 1.登陆到想要点亮的硬盘相对应的控制器上,并进去高级模式. priv set advanced 2.利用disk show -v 查看想要点亮的硬盘名字 ...
- 另类数据获取法-eax法
有些基址非常难追 所以我们用一个另类的方法来追一下 复杂的汇编代码 ------------------ call 0x****** mov esi,eax; mov ***, dword ptr d ...
- vue2.x中关于引用图片的问题
vue中引用图片的几种情况 错误片段一 <!-- template --> <img :src="p" alt="" width=" ...
- TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 —— 网络地址的分配方式
TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 -- 网络地址的分配方式 关于 DHCP(DHCP, Dynamic Host Co ...
- HGAME_2023_WEB_WP_WEEK3
Ping to the host 很明显的rce,简单测试一下发现空格,cat,:被办,且执行无回显,空格用${IFS},%09,$IFS$9等等来绕过,我们利用dnslog将执行结果外带出来,这里使 ...
- JZOJ 2020.02.01【NOIP提高组】模拟A 组
2020.02.01[NOIP提高组]模拟A 组 二月份第一场比赛 闲话 惨烈啊! 50+30+0=80分 一题都没A 唉 最高150? \(zzh\) 暴虐A组 总结: 若干新东西 \(T1\) 我 ...