优快云博客迁移至Hexo

csdn博客搬家:及其方便的博客迁移、搬家工具,支持主流博客平台----CsdnSyncHexo。 工具: CsdnSyncHexo 开门见山, 阅读详情

实现思路:

  • 获取博客列表
  • 获取博客详情
  • 解析博客详情html,找出 #article_content部分
  • 通过jsoup解析博客内容,转成md格式文件

依赖

  <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.33</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-core</artifactId>
            <version>5.8.21</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.14.3</version>
        </dependency>

java实现代码

package com.example.iotdbdemo.config;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.file.FileWriter;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.nodes.TextNode;
import org.jsoup.select.Elements;

import java.io.IOException;

/**
 * @author WANG
 */
@Slf4j
public class Csdn2Hexo {

    private static final String LIST_URL = "https://blog.youkuaiyun.com/community/home-api/v1/get-business-list?page=2&size=10000&businessType=blog&orderby=&noMore=false&year=&month=&username=%s";
    private static final String DETAIL_URL = "https://blog.youkuaiyun.com/%s/article/details/%s";
    private static final String USER_ID = "your-userId";


    private static String getHttp(String url) {
        String responseStr = null;
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpGet httpPost = new HttpGet(url);
        RequestConfig config = RequestConfig.custom()
                .build();
        httpPost.setConfig(config);
        try (CloseableHttpResponse response2 = httpclient.execute(httpPost)){
            HttpEntity entity2 = response2.getEntity();
            responseStr = EntityUtils.toString(entity2);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return responseStr;
    }

    private static void parseHtml(String html, String title, String description, String date) {
        Document document = Jsoup.parse(html);
        Element articleContentDiv = document.select("#article_content").first();
        assert articleContentDiv != null;
        Document doc = Jsoup.parse(articleContentDiv.html());
        StringBuilder markdown = new StringBuilder();
        markdown.append("---").append("\r\n")
                .append("title: ").append(title).append("\r\n")
                .append("date: ").append(date).append("\r\n")
                .append("---").append("\r\n")
                .append(description)
                .append("\r\n");
        Element element = doc.body().children().get(0);
        for (Node node : element.childNodes()) {
            if (node instanceof TextNode textNode) {
                markdown.append(textNode.text());
            } else if (node instanceof Element childElement) {
                switch (childElement.tagName()) {
                    case "h1", "h2", "h3", "h4", "h5", "h6" -> {
                        int level = Integer.parseInt(childElement.tagName().substring(1));
                        markdown.append("\n").append("#".repeat(level)).append(" ").append(childElement.text()).append("\n\n");
                    }
                    case "p" -> markdown.append("\n").append(childElement.text()).append("\n\n");
                    case "ul" -> markdown.append(convertListToMarkdown(childElement, false));
                    case "ol" -> markdown.append(convertListToMarkdown(childElement, true));
                    case "pre" -> markdown.append("\n```\n").append(childElement.text()).append("\n```\n\n");
                    default -> markdown.append("\r\n");
                }
            }
        }
        title = title.replaceAll("\\.+", "-");
        title = title.replaceAll(":+", "-");
        title = title.replaceAll("\\|+", "-");
        title = title.replaceAll(">+", "-");
        FileWriter writer = new FileWriter("E:\\gitee\\html\\" + title + ".md");
        writer.write(markdown.toString());
        log.info("Write {} success", writer.getFile().getAbsolutePath());
    }

    private static String convertListToMarkdown(Element list, boolean ordered) {
        StringBuilder markdown = new StringBuilder();
        Elements items = list.children();
        int count = 1;

        for (Element item : items) {
            String prefix = ordered ? (count++ + ". ") : "* ";
            markdown.append(prefix).append(item.text()).append("\n");
        }
        return markdown.append("\n").toString();
    }

    public static void main(String[] args) {
        String listUrl = String.format(LIST_URL, USER_ID);
        String listJson = getHttp(listUrl);
        JSONObject jsonObject = JSONObject.parseObject(listJson);
        Integer code = jsonObject.getInteger("code");
        if(code == 200){
            JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list");
            if(CollUtil.isNotEmpty(jsonArray)){
                for (Object o : jsonArray) {
                    if(o instanceof JSONObject item){
                        Integer articleId = item.getInteger("articleId");
                        String title = item.getString("title");
                        String description = item.getString("description");
                        String date = item.getString("postTime");
                        String detailUrl = String.format(DETAIL_URL, USER_ID, articleId);
                        String html = getHttp(detailUrl);
                        parseHtml(html, title, description, date);
                    }
                }
            }
        }
    }


}

彩虹期权定价 彩虹期权的定价较为复杂,因为它涉及多个标的资产的联合分布。蒙特卡洛模拟(Monte Carlo Simulation):通过模拟多个标的资产价格路径,计算期权的预期支付。解析近似方法:如马尔可夫链近似方法或多变量Black-Scholes公式的扩展。数值方法:如有限差分法或傅里叶变换法,适用于某些特定条件下的多资产期权定价。由于彩虹期权涉及多个标的资产,我们通常使用蒙特卡洛模拟来进行定价。接下来,我将演示如何使用Heston模型和蒙特卡洛模拟方法来定价彩虹期权。 阅读详情

相关推荐

FreeSWITCH安装指南:三种部署方式解析与实践对比

Freeswitch部署方案比较:Yum安装简单快捷但灵活性差;源码安装可定制性强,适合深度开发和性能优化;Docker部署环境一致性好但网络配置复杂。生产环境推荐源码安装以获得最佳性能和定制能力,而Docker适合快速部署和扩展。不同方案各有利弊,需根据具体需求选择。

c_zyer的博客 2135

优快云等博客迁移的简单方法

按F12,打开浏览器console,粘贴下列内容回车,你会看到浏览器标题的数字变化,已经开始下载。

艽野尘梦的博客 376

如何在RT-DETR-R18中修改ultralytics的yaml文件(附完整代码)

本文详细指导如何在RT-DETR模型中,通过修改Ultralytics框架的yaml配置文件,将Backbone从ResNet50轻量化替换为ResNet18。核心步骤包括自定义ResNet18基础模块、调整HybridEncoder的expansion参数至0.5,并协同修改检测头Decoder层数,最终提供完整的配置文件代码,助力开发者在资源受限环境下部署轻量级实时目标检测模型。

weixin_29091445的博客 287

《优快云博客搬家》

搬家要求:填入搬过去的博客地址、发布一条博客搬家的文章,填完之后点击申请搬家即可。进入创作者中心,选择工具->搬家。

AxyLL的博客 741

Robocup3d

一、 比赛介绍 RoboCup 仿真比赛是一个能为多智能体系统和模拟智能进行研究、教育的工具。比赛是在一个标准的计算机环境中进行的,提供了一个完全分布式控制、实时异步多智能体环境。通过这个平台,可以测试各种理论、算法和Agent体系结构。在实时异步、有噪声的对抗环境中,研究多智能体的合作对抗问题。当然,仿真组的比赛使用的机器人并非是真的机器人。一个机器人是一个Agent, 它拥有自己的大脑,

zhanghe2775115的专栏 7263

Telegram 担保交易系统搭建指南:安全可靠的交易流程实现

本文介绍了基于Telegram Bot API搭建担保交易系统的完整方案。该系统通过第三方资金托管机制解决买卖双方信任问题,支持"付款后发货"和"收货后放款"的交易流程。文章详细阐述了系统架构设计,包括Telegram Bot交互层、后端业务逻辑层、数据库层和支付接口层。核心实现步骤涵盖:1)订单创建模块处理交易信息;2)支付处理模块集成Stripe Escrow实现资金托管;3)确认收货模块完成资金划转。系统采用PostgreSQL存储交易数据,并通过FastAPI

jingpide9527的博客 1940

导出优快云文章,并转成Hexo要求的样式,博客迁移

想把优快云博客同步到拿GitHub Page搭的独立博客上去,找了下,发现有人用Python写了个工具,可以将博客导出为Markdown和HTML格式:csdn-blog-export把它搬到了百度盘,链接: http://pan.baidu.com/s/1o8fpxGI 密码: pgbb用法很简单(注意:博客主题需切回“碧海蓝”,我的“极客世界”主题失效): ./main.py -u 优快云

静影沉璧 4017

零售-公司间关联交易退货STO的实现方式

零售-公司间关联交易采购 STO-退货 集团公司下经常会出现一家公司和另外一家公司的公司间的关联交易,如跨公司销售、总分公司之间采购,分公司之间的采购等业务;通常公司间采购会采取STO的模式来实现(根据业务模式可以将库存转储统一做成STO的模式,公司间STO、同公司工厂间、同工厂库存地点间 的STO SAP都是支持的); 公司间STO 正向A向B采购都很熟悉,公司间退货STO的其实也是比较普遍的业务现象,很多实施着也将其做成反向的STO(B向A采购),而不是退货STO(A向B,item 选择return的标

weixin_45518759的博客 2829

csdn文章迁移/迁走历程与实践

csdn 迁移

随笔 495

软件设计师---UML

软件设计师---UML

我从不打没有准备的仗! 1万+

在 SAP HANA 与 HANA Cloud 中,用 SQL DDL 创建数据库视图:从设计时工件到运行时对象的全链路实践

本文介绍了在SAP HANA中通过HDI容器使用DDL定义视图的方法。主要内容包括:1)采用.hdbview设计时工件存储视图定义,构建时自动转换为运行时视图,实现版本控制和权限隔离;2)开发前需准备HDI容器、MTA项目及配置.hdiconfig文件;3)详细说明.hdbview语法结构,重点讲解WITH READ ONLY和WITH STRUCTURED PRIVILEGE CHECK的使用场景;4)提供了从创建文件到构建验证的完整流程示例;5)强调跨容器访问时需通过.hdbgrants为#OO用户授予

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 267

优快云博客迁移到HEXO

优快云博客迁移到HEXO 一直想把优快云博客全部迁移到HEXO,但是HEXO是有特定格式的,网上找了很多工具都不太好用。终于发现了一个! https://github.com/flytam/CsdnSyncHexo 我来记录一下使用步骤(其实在该项目的README界面有详细的介绍,不过自己操作起来稍微有点不同): 1、安装 # > 3.0版本 npm i csdnsynchexo@latest 2、在当前目录下新建config.json,内容如下 userId csdn 用户名。如https

Hello World 1291

【中项】案例分析 | 答题技巧 | 备考 

对偏差原因的分析和对项目未来趋势的理解。如果偏差是由一次性事件或特殊原因引起的,那么这种偏差是非典型的,意味着未来的绩效将回归到预期的绩效水平。例如,如果项目初期的CPI小于1,原因是意外的自然灾害导致成本增加,那么这种偏差被认为是非典型的,因为它不太可能在未来重复发生。例如,如果项目初期的CPI小于1,且原因是低效的团队协作,那么这种偏差被认为是典型的,因为它可能在整个项目生命周期中持续存在。在实际应用中,项目经理通常会结合CPI、SPI和偏差趋势图等工具,综合分析偏差的性质,以制定合理的项目控制策略。

静谧、淡雅 1242

优快云博客迁移至Hexo之同步优快云博文到本地MD文件

动机  自从我把Github+Hexo的博客“交给”Google之后,每天都有几十位的访客2333,访客少的原因有许多,一个是文章较少,二是百度虫子没有爬到我的页面,就会导致即就算直接搜索博客里面的内容,百度都不会返回我的地址,就这个情况我已经使用百度和谷歌去处理了,至于文章较少的问题,我打算做个博客迁移!

纸上得来终觉浅,绝知此事要躬行 3434

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

批量迁移优快云博客到hexo

之前突然突发奇想,将博客进行一个迁移操作(csdn真的有点越来越不友好了,囧),于是选择了vutrl+hexo的组合 我需要解决的问题有两个: 将我的所有博客转成md格式存储到本地 md文件中,所有的图片需要下载并替换成图床地址(优快云做了访问限制) 第一个问题,我本来打算自己动手写爬虫的,但发现有一个哥们已经写出了一个好用的软件,博客文章点这里 亲身体验了一下,确实还是不错的,基本上都下载...

Sp4rkW的博客 2063

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

优快云博客迁移到Hexo(提供格式转换)

1.背景 前几天用GitHub搭好博客后,想把在优快云上的文章转换成符合Hexo要求的MarkDown文件,为避免重复造轮子,我先在GitHub搜了一下项目,最终决定使用这个工具。 2.准备工作 安装Node.js 安装npm 全局安装 csdnsynchexo工具包,命令行运行: npm i -g csdnsynchexo` 将项目代码克隆到本地 git clone htt...

huoji555的博客 1601

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

利用爬虫爬取指定用户的优快云博客文章转为md格式,目的是完成博客迁移博文到Hexo等金静态博客...

ps:一个从csdn迁移到hexo等静态博客的java程序 github:github.com/dataiyangu/… 我的个人博客:mmmmmm.me 博客源码:github.com/dataiyangu/… 功能 概述:利用爬虫爬取指定用户的优快云博客文章转为md格式,目的是完成博客迁移 爬取的方式: 1 默认轮询从第一页开始往后 2 专栏方式 3 指定某篇文章 4...

weixin_34148508的博客 1361

博客搬家 -- 将博客从优快云迁移到hexo上

好久没写博客了,前段时间又忙着找工作,近期有些颓废. 现在又满血复活,逗留了好久,为了提升逼格同时也为了养成良好的写作习惯,记录个人成长路上的点点滴滴, 故而将博客搬家到hexo上:新博客地址.望关注支持,谢谢!

xin__dong的专栏 3332

优快云博客迁移至Hexo之Html2Md服务(专为csdn打造)

接着上篇优快云博客迁移至Hexo之同步优快云博文到本地MD文件 此篇介绍下html2md服务,我将上篇遗留的问题—csdn中的代码高亮转换失败的问题修复了下,结果还算满意,自己搭了服务,大家可以试一试,玩一玩,有问题可以私信我~

纸上得来终觉浅,绝知此事要躬行 1481

博客由Hexo迁移到优快云

新的博客,新的开始。之所以从hexo叛逃来此,也是希望自己能安下心来专心关注博客内容。写了半年多的博客,慢慢发现其实最重要的还是博客的内容。一定要专注内容,不然也就丧失了写博客的意义。使用hexo这么长时间,结果发现折腾这些样式是最多的。。。无语了,就比如用linux却一直折腾桌面环境,失去了原本的意义。 以此文做为分界线,Coding 新生活!

Waydrow的博客 859

【经验分享】如何利用Python批量迁移csdn博客到Hexo个人博客

1、博客批量导出为md import requests import parsel import tomd import os import re #对一篇文章的爬取 def spider_one_csdn(title_url): # 目标文章的链接 head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105

思南的博客 350

优快云迁移Hexo脚本分享

前言这一阵子,刚换了落脚地儿,没想好该去折腾什么,恰好看到可以用git page搭建一个博客,就搞了搞。关于主题啊,配置啊什么的,网上都有好多,偏偏迁移这个事儿挺麻烦,幸好有找到一前辈的脚本,可以将优快云的博客导出为markdown格式,但是其导出来的md文件并不能直接用hexo,想要显示的好一些还需要再用脚本将它二次润色。 本人重写了润色的脚本,并增加了对优快云的分类的爬取,将其作为hexo

YiShi's Blog 2946

利用爬虫爬取指定用户的优快云博客文章转为md格式,目的是完成博客迁移博文到Hexo等静态博客...

文章目录功能爬取的方式:设置生成的md文件命名规则:设置md文件的头部信息是否显示csdn中的锚点"文章目录"字样,以及下面具体的锚点 默认false(因为csdn中是集成了[toc]功能的,hexo并没有集成)是否开启版权声明 默认false(csdn文章头部有我们自定的版权声明,false即为去掉。)工具提示用法:方式一:方式二:方式三...

as403045314的博客 757

一个超方便一键将 csdn 博客生成 hexo 源文件的工具

这个工具很早之前写的了。新年疫情原因宅家太无聊了,简单写下文档使用说明… 大家在日常写博客的过程中,肯定会遇到想迁移博客的时候。例如我之前就遇到想把 csdn 博客文章迁移到 hexo 上。hexo 的文章源文件就是一些符合特定格式 markdown 的文章。因此要实现也比较简单,对 csdn博客首页 进行爬虫,(都是一些一些基础的获取标签之类的内容操作了,不详细讲了),然后生成符合特定格式 ...

Geek技术前线 1071

优快云博客搬家hexo,优快云的博客如何保存为md格式文件,并解决在hexo中csdn的图片链接无法显示的问题

背景:借助 hexo 和 github 搭建了一个自己的博客网站,如何把已有优快云的博客快速迁移到hexo上,成为了要解决的问题。在找了一圈之后,没有找到合适的解决方案,于是我决定干苦力,把博客里的图片保存到了本地,然后再hexo的项目中,然后用相对路径的方式引入。本来一行代码可以搞定的事,哎,再想想我干的蠢事,吃了没有文化的亏啊。直到我都干完之后,无意中了解到了这行代码,于是到我的项目中试了一下,别说,还真行。cookie:打开csdn,在控制台中查看网络请求,请求表头中cookie值。

前端笔记——放弃很容易,但坚持一定很酷 809

通过爬虫迁移优快云博客

最早是在优快云上写博客的,可是渐渐发现优快云写博客有诸多限制,而且优快云博客时不时会挂掉,因此后面用Hexo在github上搭了一个新博客,也就是现在这个。然而这样一来很多文章就留在优快云上,而在新博客上找不到了。 因此前几天用Java写了一个爬虫,把优快云上的博客内容爬了下来,并解析成markdown格式存储在本地,这样就可以方便的迁移到新的博客了 优快云博客迁移,把优快云

ZCC的专栏 1022
上一篇: Vue3【四】集成json-editor-vue3
下一篇: JPA MySql 同时对两个字段进行in的查询
宁漂打工仔
博客等级 码龄9年 1万+粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁漂打工仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值