网络爬虫之html2md

前言

上周利用java爬取的网络文章,一直未能利用java实现html转化md,整整一周时间才得以解决。

虽然本人的博客文章数量不多,但是绝不齿于手动转换,毕竟手动转换浪费时间,把那些时间用来做些别的也是好的。

设计思路

Java实现

一开始的思路是想着用java来解析html,想着各种标签解析、符号解析、正则替换等等,决定在github上搜索一波,果然是有前辈实现过,顿时欣喜若狂;

代码地址

下载后如下图

可利用htmlToHexoMd方法测试运行

可能作者是在linux服务器上定义的路径,我测试的时候一直提示路径问题,结果被迫更改转化的路径代码,

调试运行后生成的md文件,本地启动hexo服务,上传刚刚生成md文件,网页浏览,不满,弃之。

NodeJS实现

为何突然会选择NodeJS来实现,刚好最近在看node书籍,里面有提到node爬虫,解析爬取的内容,书中提到利用cheerio模块,遂果断浏览其api文档,cheerio其实就是jquery的翻版,这下可方便了,心中大喜。

实现思路

实现单个转化

自定义解析

实现批量转化

难点分析

自定义解析是比较头疼的事情,必须要分析需要转化的html的格式,需要读取的内容,本人对h1,h2,h3,div,img,a标签做了处理,可自行扩展

html解析代码如下

       if('p' === name){
                if(e_children.type === 'text'){
                    if(e.children.length > 1){
                        for(var j=0,c_len=e.children.length;j<c_len;j++){
                            if(e.children[j]['name'] === 'a') writeData = writeData + '('+e.children[j].attribs.href + ')\r\n';
                            else if(e.children[j]['type'] === 'text') writeData = writeData + e.children[j].data + '\r\n';
                        }
                    }else writeData = writeData + e.children[0].data + '\r\n';
                }else if(e_children.name === 'img') writeData = writeData + '![Image]('+e.children[0].attribs.src + ')\r\n';
            }else if('div' === name){
                var codes = $('#cnblogs_post_body .cnblogs_code pre').eq(code_idx++).text();
                codes = codes.replace(/^(\s*)\d+/gm, ' ');
                writeData = writeData + '```bash\r\n' + codes + '\r\n```\r\n';
            }else if('h1' === name) writeData = writeData + '# ' + e_children.data + '\r\n';
            else if('h2' === name) writeData = writeData + '## ' + e_children.data + '\r\n';
            else if('h3' === name) writeData = writeData + '### ' + e_children.data + '\r\n';

结语

完整代码请移步至本人的github,如果此文章对您有用请不吝star

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

Github 项目推荐 | 用于训练和测试文本游戏强化学习 Agent 的工具

TextWorld 是一个沙盒环境,用于训练和测试基于文本游戏的强化学习 Agent。

9220
来自专栏java工会

你应该关注的几个Eclipse超酷插件

1.4K20
来自专栏杨建荣的学习笔记

swingbench压测Oracle小记(r12笔记第19天)

之前也分享过一篇关于swingbench测试Oracle的文章,图形工具和命令行的博弈-swingbench配置(r8笔记第63天),也算是一个起步了。 ...

39770
来自专栏互联网数据官iCDO

Google代码管理工具101 部分5-表单

主编前言: 很多朋友都听说过Tag Management(监测代码管理),但其强大的功能和实现方式,了解的朋友不多。本系列以Google Tag Manager...

39450
来自专栏开源优测

jmeter性能测试实践注意事项12

前言 在使用jmeter进行性能测试实践时,必须要注意jmeter的一些局限性,充分使用jmeter优势功能,这样才能更好的发挥出jmeter的能力。 要注意限...

37880
来自专栏张善友的专栏

社区网站系统 jsGen

jsGen是用纯JavaScript编写的新一代开源社区网站系统,主要用于搭建SNS类型的专业社区,对客户端AngularJS应用稍作修改也可变成多用户博客系统...

26050
来自专栏编程

八个技巧,提高Web前端性能

1. 优化 CSS 性能 CSS,即级联样式表,能从 HTML 描述的内容生成专业而又整洁的文件。很多 CSS 需要通过 HTTP 请求来引入(除非使用内联 C...

237100
来自专栏微信小程序开发

小程序中wx.xx is not a function的报错

30940
来自专栏前端架构

web统计原理及实现方法汇总总结—网站统计中的数据收集

在php、jsp、asp后端总揽一切的时代,网站统计基本是后台的事情——其实web开发,也没有前端这个职位,网站设计(现在的UI)不仅要前途还要用dreamwa...

46320
来自专栏韩伟的专栏

经典的服务器结构概述(中)

. 经典的服务器结构概述(中) 今天将和大家详细探讨分服模型,本文结构如下: ? 1模型描述 分服模型是游戏服务器中最典型,也是历久最悠久的模型。其特征是游...

45870

扫码关注云+社区

领取腾讯云代金券