语雀批量导出与图片下载
文章目录
- 一、简介
- 二、导出文档图片批量替换
- 三、Markdown中的图片转换到本地
- 四、文档批量下载
一、简介
在云笔记方面我一般使用wolai和语雀,本地笔记用Typora,但是这两个云笔记各有利弊
- wolai的导出可以随md文件直接生成对应的图片文件夹,而且可以直接批量导出(需要企业版),但是普通账户的图床容量只有200M
- 语雀个人账户的图床拥有10G容量,但是只支持单个文件导出,而且导出md文档的时候图片使用的还是语雀的图床,断网会导致不可访问,而且不能进行本地离线备份
因此今天这篇文章就记录一下语雀如何进行图片本地化保存以及文档批量备份下载
二、导出文档图片批量替换
在实际的使用中,有几个网站是可以获取到语雀图片的(不用重新上传,自动转存)
- 微信公众号
- csdn
- 掘金
- 知乎
但是还是需要将语雀图片的后缀给去掉,第一种方法是无需运行脚本,如果Typora支持正则,直接正则匹配#clientId=[a-z0-9-&=%.]*
(注意可能会变,自己根据实际情况来进行替换),将这串字符给全部替换为空;
第二种需要进行跑python脚本,然后运行python test.py [源文章] [目标文章]
(举例:python test.py test.md test2.md
)
import re
import requests
import os
import sysoutput_content = []def deal_yuque(origin_md_path, output_md_path):with open(origin_md_path, 'r', encoding='utf-8', errors='ignore') as f:for line in f.readlines():line = re.sub(r'png#(.*)+', 'png)', line)image_url = str(re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+',line))output_content.append(line)with open(output_md_path, 'w', encoding='utf-8', errors='ignore') as f:for _output_content in output_content:f.write(str(_output_content))def main():origin_md_path = sys.argv[1]output_md_path = sys.argv[2]deal_yuque(origin_md_path, output_md_path)if __name__ == '__main__':main()
三、Markdown中的图片转换到本地
参考:https://github.com/u21h2/yuque2md
可以根据自己定制批量化的修改操作,修改原理识别文档的图片地址,并自动下载到本地,最后替换文档中的路径
import re
import requests
import os
import sysyuque_cdn_domain = 'cdn.nlark.com'
output_content = []
image_file_prefix = 'image-'# origin_md_path: 输入的markdown文件路径
# output_md_path: 输出的markdown文件路径
# image_dir: 图片存储的目录
# image_url_prefix: 图片链接前缀,空字符串或者路径或者CDN地址
# image_rename_mode: 图片重命名模式,raw: 原始uuid模式,asc: 递增重命名模式
def deal_yuque(origin_md_path, output_md_path, image_dir,image_url_prefix,image_rename_mode):idx = 0with open(origin_md_path, 'r', encoding='utf-8', errors='ignore') as f:for line in f.readlines():line = re.sub(r'png#(.*)+', 'png)', line)image_url = str(re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+',line))# 如果只下载语雀的图片可以在这里加个判断# if yuque_cdn_domain in image_url:if ('https://' in image_url) and ('.png' in image_url):image_url = image_url.replace('(', '').replace(')', '').replace('[', '').replace(']', '').replace("'", '')if '.png' in image_url:suffix = '.png'elif '.jpeg' in image_url:suffix = '.jpeg'download_image(image_url, image_dir, image_rename_mode, idx, suffix)to_replace = '/'.join(image_url.split('/')[:-1])new_image_url = image_url.replace(to_replace, 'placeholder')if image_rename_mode == 'asc':new_image_url = image_url_prefix + image_file_prefix + str(idx) + suffixelse:new_image_url = new_image_url.replace('placeholder/',image_url_prefix)idx += 1line = line.replace(image_url, new_image_url)output_content.append(line)with open(output_md_path, 'w', encoding='utf-8', errors='ignore') as f:for _output_content in output_content:f.write(str(_output_content))return idxdef download_image(image_url, image_dir, image_name_mode, idx, suffix):r = requests.get(image_url, stream=True)image_name = image_url.split('/')[-1]if image_name_mode == 'asc':image_name = image_file_prefix + str(idx) + suffixif r.status_code == 200:open(image_dir+'/'+image_name, 'wb').write(r.content)del rdef mkdir(image_dir):image_dir = image_dir.strip()image_dir = image_dir.rstrip("\\")isExists = os.path.exists(image_dir)if isExists:print('图片存储目录已存在')else:os.makedirs(image_dir)print('图片存储目录创建成功')return image_dirdef main():origin_md_path = sys.argv[1]output_md_path = sys.argv[2]image_dir = sys.argv[3]image_url_prefix = sys.argv[4]image_rename_mode = sys.argv[5] # raw ascmkdir(image_dir)cnt = deal_yuque(origin_md_path, output_md_path, image_dir, image_url_prefix, image_rename_mode)print('处理完成, 共{}张图片'.format(cnt))if __name__ == '__main__':# origin_md_path = input('原文件路径:') # output_md_path = input('目标输出文件路径:')# image_dir = input('图片存储路径:')# image_url_prefix = input('文档图片前缀(默认为当前路径):') or ''# image_rename_mode = input('图片重命名模式(raw和asc默认为asc):') or 'asc'# mkdir(image_dir)# cnt = deal_yuque(origin_md_path, output_md_path, image_dir, image_url_prefix, image_rename_mode)# print('处理完成, 共{}张图片'.format(cnt))main()
四、文档批量下载
参考:https://github.com/dzh929/ExportMD-rectify-pics
https://www.yuque.com/duzh929/blog/ocffqg
改导出方法不仅批量导出md文档,而且图片也以文件夹方式保存在本地
git clone https://github.com/dzh929/ExportMD-rectify-pics.git
cd ExportMD-rectify-pics
pip install -r requirements.txt
python ExportMD.py
# 对于namespace的获取
# 知识库 https://www.yuque.com/YourYuqueUserName 对应的 namespace 为 YourYuqueUserName
# Token需要创建# 如果发生错误,删除.userinfo后重试
语雀批量导出与图片下载相关推荐
- 语雀批量导出MarkDown文件
一.背景 笔记写在语雀有时候总想本地再存储一份,但是一个个导出又太麻烦了.需要导出语雀的全部文件,并导出为markdown格式. 二.实现 2.1配置json配置文件 设置token 登录网页版语雀, ...
- 语雀批量导出MarkDown文件,指定知识库所有内容
需求 导出语雀的全部文件,并导出为markdown格式. 技术 python,本人是学的是java并不会python,所以不会介绍太多的技术 流程 1. 安装python环境,参考其他文章 https ...
- 通过Java批量导出带有图片的Excel文件数据
批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...
- 大多数人不敢想的PDF操作:添加书签,电子签名,压缩,修改文字,提取部分页面为新文件、批量导出为图片
目录 PDF神仙级软件和网站(免费) PDF加书签 PDF电子签名 PDF文件压缩 修改PDF内的文字 提取部分页面为新PDF文件 PDF批量导出为图片 PDF神仙级软件和网站(免费) 主要以比较方便 ...
- 语雀可以导出html吗,工具 - Confluence 迁移到语雀 - 《语雀使用文档》 - 书栈网 · BookStack...
Confluence 迁移到语雀 实现原理 基于 Confluence 自带的 「HTML Export」功能,可以将整个空间(Space)以 HTML 文件格式导出到一个 zip 文件中.这样语雀就 ...
- 语雀可以导出html吗,Confluence 迁移到语雀
Confluence 迁移到语雀 实现原理 基于 Confluence 自带的 「HTML Export」功能,可以将整个空间(Space)以 HTML 文件格式导出到一个 zip 文件中.这样语雀就 ...
- Java 批量导出包含图片的Word文档
业务需求:客户需要在资产管理系统中批量导出包含资产二维码等信息的Word文档,如下图 导出Word文档效果如下图 需求就摆在面前,接下来就是技术选型问题了.由于一开始做编程是从OC入门的,但是由于OC ...
- powershell 批量导出Access图片(OLE对象)到文件
01 前言 这是大半年前的事了,帮一朋友研究如何批量导出Access里面存的图片(OLE对象).Access没有提供直接导出图片的方法,很郁闷.查过一番资料,都不是很满意,决定自己鼓捣.经过N天的奋战 ...
- Excel 2010 VBA 入门 105 将工作表数据批量导出为图片
目录 示例 代码 Copy. Cut和Paste方法 图表对象(Chart)的Export方法 利用PPT导出图片 示例 为防止数据的更改或者盗用,将所选的数据区域导出为图片进行展示. 代码 在Exc ...
最新文章
- 移动互联网时代的信息安全与防护_移动互联网时代,草根创业还有哪些机会?...
- php artisan cache:clear命令报错
- java 什么是耦合_什么是耦合、解耦
- 第一章 TCP/IP协议族
- [vue] 父子组件间传值
- LeetCode刷题(Python)——汉明距离
- HDU 1002 大整数
- T SQL + 正则表达式
- grep 去掉 grep_使用grep的regex的10个实用示例
- Screens的开发一
- Maven与Ant使用reportNG代替testng
- 《Java高级Struts2》教学大纲(云计算) 版本号	编写人	版本描述 V1.0		 目录 课程教学目标	5 (一)知识目标	5 (二)能力目标	6 (三)速度目标	6
- 数据中心节能制冷系统分析
- vlan网络隔离实验
- ps手柄震动测试软件,PS3 可实现震动 用PS3手柄连接电脑图文教程 - 电玩巴士
- SpringMVC + JUnit4 单元测试 - Controller 测试
- 【愚公系列】2022年10月 微信小程序-电商项目-收货地址功能实现
- 现行一级学科和二级学科目录(学位授予和人才培养学科目录)
- 查询mysql 的内存使用_如何查看MySQL内存使用情况
- 网络安全_密码学实验_非对称加密算法RSA
热门文章
- java matlab 遗传算法_简单遗传算法MATLAB实现
- 解压软件Bandizip
- dwf怎么合成一个_油菜素内酯合成基因DWF1、DET2影响毛白杨木质部形成
- gorm中使用where in 条件
- 双十一快件近40亿再创历史新高;疫情挑战下中国受访者对科学的信任度位居全球第一 | 美通企业日报...
- 新增10所高校获批虚拟现实技术本科专业,中国市场将超千亿
- 前置:API:DSP:核心交换机:边界网关协议:边界:(防御)防火墙:负载均衡:摆渡机:名词解释
- Esp8266 进阶之路19 【外设篇①】esp8266驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。(附带Demo)
- 用CSS3实现无限循环的无缝滚动
- shopnc2014年11版数据库字典