爬取CSDN博文到本地(包含图片,标签等信息)

文章目录

  • csdnToMD
    • 改进
    • 将CSDN文章转化为Markdown文档
    • 那有什么办法快速得到md文档?
    • 例如:
      • 获取单个文章markdown
      • 获取所有的文章markdown
    • 项目中待解决的问题

csdnToMD

项目原作者:https://gitee.com/liushili888/csdn-is—mark-down

改进后仓库地址:https://github.com/Xiamu-ssr/csdnToMD

改进

这里进行一定的改进,可以更准确获取时间,也可以选择图片的存放方式是否集中或分离到每篇文章的同名文件夹,以适应部分md扩展语法,比如{% asset_img 1.png %}

爬取结果截图
在这里插入图片描述
在这里插入图片描述

将CSDN文章转化为Markdown文档

很多情况下,我们需要将CSDN中的文章转化为markdown文档,直接复制全文是不可以的,CSDN不支持。

那有什么办法快速得到md文档?

原理:

  • 由于CSDN不是获取数据不是前后端分离的,所以无法根据接口获取文章的所有数据,它的数据是和页面元素组合在一起的,需要根据页面中的元素标签转化为markdown中的元素标签。
  • 使用jsoup解析csdn文档
  • 利用jericho-htmlflexmark-alljsoupselenium等工具将html文档转化为markdown文档

使用:

  • https://googlechromelabs.github.io/chrome-for-testing/下载chromedriver,解压后修改DynamicScraperTime函数的驱动地址。如果不下载驱动也可以,把String time = DynamicScraperTime(startUrl);的获取换成下一行被注释的就行,但是因为页面动态加载的原因,会无法获取准确的时间。
  • 然后直接将CSDN文章的url放入crawler类即可

例如:

获取单个文章markdown

public class Main {private static final String CSDN_URL = "https://blog.csdn.net/m0_51390969/";public static void main(String[] args) {AbstractCrawler crawler = new CsdnCrawler();crawler.crawlOne("https://blog.csdn.net/m0_51390969", "131172667");}
}

获取所有的文章markdown

public class Main {private static final String CSDN_URL = "https://blog.csdn.net/m0_51390969/";public static void main(String[] args) {AbstractCrawler crawler = new CsdnCrawler();crawler.crawl(CSDN_URL);}
}

项目中待解决的问题

在这里插入图片描述

TODO ‘> ’标签中包含代码块,需要处理

TODO 代码中格式待处理

TODO 增加GUI页面

TODO 公式、表格标签的处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue脚手架 项目打包

目录 01 在脚手架中使用jquery 02 项目的打包 03 ELement UI 框架 01 在脚手架中使用jquery 脚手架中使用jquery的步骤: 1.npm i jquery --save 2.在使用jq的组件里面引入jq 3.import $ from jquery 4.正常使用 02 项目的打包 1.npm run build 项目启动不启动都可以打包 2.…

爬虫补环境,ES6 Class在环境模拟中的应用与优势

相比于使用传统的Object实现补环境框架结构,使用 ES6 的 Class 具有以下优势: 代码维护更方便:Class的语法更简洁直观,方便开发者阅读和维护。组织结构更清晰:Class提供了明确的层次结构,有助于代码的模块…

Z语言学习——基于通讯案例

目录 1数据类型 2初始状态 3 Alice的消息发送 4 Bob接收与发送消息 5 Alice接收消息 6消息的增删改查 6.1 删除消息 6.2查询消息 6.3修改/增加消息 7定理证明——重要目的 案例背景: (1)构建一个交互式的通讯方案; (2)攻击者控制了所有的通讯…

tsf-consul的使用

在腾讯云微服务平台TSF中使用Consul作为服务发现组件,通常需要遵循以下步骤: ### 1. 创建应用 首先,您需要在TSF控制台创建一个应用。在创建应用时,选择合适的业务类型、开发语言、开发框架等信息。对于使用Consul作为服务发现组件的Spring Cloud应用,您需要选择“业务应…

眼见不一定为实之MySQL中的不可见字符

目录 前言 一、问题的由来 1、需求背景 2、数据表结构 二、定位问题 1、初步的问题 2、编码是否有问题 3、依然回到字符本身 三、深入字符本身 1、回归本质 2、数据库解决之道 3、代码层解决 四、总结 前言 在开始今天的博客内容之前,正在看博客的您先来…

Element-UI实现el-dialog弹框拖拽功能

在实际开发中,会发现有些系统,弹框是可以在浏览器的可见区域自由拖拽的,这极大方便用户的操作。但在查看Element-UI中弹框(el-dialog)组件的文档时,发现并未实现这一功能。不过也无须担心,vue中…

在uniapp+vue cli中使用lime-echart图表,关于使用异步数据_lime-echartuniapp

import {TitleComponent,TooltipComponent,GridComponent, DatasetComponent, TransformComponent, LegendComponent } from ‘echarts/components’; // 标签自动布局,全局过渡动画等特性 import {LabelLayout,UniversalTransition} from ‘echarts/features’; //…

59.SQLSERVER中自定义函数的基本使用

1.自定义函数: CREAT FUNCTION [dbo].[GetVisitTypeCode] (VisitTimeAndType VARCHAR(40))RETURNS VARCHAR(2)ASBEGINDECLARE VisitTypeName varchar(10),VisitTypeCode varchar(2),VisitTimeAndType1 VARCHAR(40)IF VisitTimeAndType IS NOT NULLBEGINSET VisitT…

Day 28:2748. 美丽下标对的数目

Leetcode 2748. 美丽下标对的数目 给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c;如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c;则认为 nums[i] 和 nums[j] 是一组 美丽下标对 。 返回…

json的特点

JJSON是一种轻量级的数据交换格式&#xff0c;它基于JavaScript编程语言的一个子集&#xff0c;采用完全独立于语言的文本格式&#xff0c;结构化程度高。 JSON的主要特点包括&#xff1a; 轻量级&#xff1a;JSON的格式紧凑&#xff0c;易于传输和解析。 结构化&#xff1a;…

Linux系统之ARP命令的基本使用

Linux系统之ARP命令的基本使用 一、ARP介绍二、ARP命令帮助2.1 ARP的help帮助信息2.2 ARP命令的帮助解释 三、ARP命令的基本使用3.1 查看ARP缓存3.2 显示详细信息3.3 添加静态arp映射3.4 删除指定主机的ARP条目3.5 从文件读取并添加条目3.6 清除ARP缓存 四、注意事项五、总结 一…

wins系统资源监视器任务管理器运行监控CPU、内存、磁盘、网络运行状态

目录 1.Windows系统资源监视器的详细介绍2.通过任务管理器打开资源监视器3.任务管理中总体观察观察cpu、pid、应用程序、I/O次数或者说读写字节数 4.观察CPU观察cpu核心数&#xff0c;以及哪些占用cpu频率过高 5.观察内存观察各个应用占用的内存大小和对应线程 6.观察磁盘活动观…

【前端技巧】css篇

利用counter实现计数器 counter-reset&#xff1a;为计数器设置名称&#xff0c;语法如下&#xff1a; counter-rese: <idntifier><integer>第一个参数为变量名称&#xff0c;第二个参数为初始值&#xff0c;默认为0 counter-increment&#xff1a;设置计数器增…

LabVIEW与3D相机开发高精度表面检测系统

使用LabVIEW与3D相机开发一个高精度表面检测系统。该系统能够实时获取三维图像&#xff0c;进行精细的表面分析&#xff0c;广泛应用于工业质量控制、自动化检测和科学研究等领域。通过真实案例&#xff0c;展示开发过程中的关键步骤、挑战及解决方案&#xff0c;确保系统的高性…

宕机了, redis如何保证数据不丢?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

【Linux从入门到放弃】进程地址空间

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《Linux从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 进…

如何更换OpenHarmony SDK API 10

OpenHarmony社区已经发布OpenHarmony SDK API 10 beta版本&#xff0c;有些 Sample案例 也有需要API10。那么如何替换使用新的OpenHarmony SDK API 10呢&#xff1f;本文做个记录。 1、如何获取OpenHarmony SDK 1.1 每日构建流水线 可以从OpenHarmony每日构建站点获取最新的…

【网络安全的神秘世界】已解决Failed to start proxy service on 127.0.0.1:8080

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 解决burpsuite无法在 127.0.0.1&#xff1a;8080 上启动代理服务端口被占用以及抓不到本地包的问题 Burpsuite无法启动proxy…

Java跳动爱心代码

1.计算爱心曲线上的点的公式 计算爱心曲线上的点的公式通常基于参数方程。以下是两种常见的参数方程表示方法&#xff0c;用于绘制爱心曲线&#xff1a; 1.1基于 (x, y) 坐标的参数方程 x a * (2 * cos(θ) - sin(θ))^3 y a * (2 * sin(θ) - cos(θ))^3 其中&#xff…

定个小目标之刷LeetCode热题(25)

这道题采用的解法是桶排序&#xff0c;画草图如下 代码如下 //基于桶排序求解「前 K 个高频元素」 class Solution {public int[] topKFrequent(int[] nums, int k) {HashMap<Integer, Integer> map new HashMap();for (int num : nums) {if (map.containsKey(num)) {m…