摘要:但发现导出来的没有高亮语法没有语法高亮咋看啊,所以到这里我就放弃了,将就用一下博客园生成的吧爬虫学习上面提供的接口是一个生成一个文件,我是不可能一个一个将链接和标题放上去生成的因为博客园上发的也将近篇了。
前言
只有光头才能变强
之前有读者问过我:“3y你的博客有没有电子版的呀?我想要份电子版的”。我说:“没有啊,我没有弄过电子版的,我这边有个文章导航页面,你可以去文章导航去找来看呀”..然后就没有然后了。
最近也有个读者提过这个问题,然后这两天也没什么事做,所以打算折腾折腾,看看怎么把博客转成PDF。
一、准备工作要将博客转成PDF,我首先想到的是能不能将markdown文件转成PDF(因为平时我就是用markdown来写博客的)。
想了一下,原生markdown显示的话,代码是没有高亮的,格式也不会太好看。
所以就放弃了这个想法。
于是就去想一下,可不可以将HTML转成PDF呢。就去GitHub搜了有没有相关的轮子,也搜到了一些关于Python的爬虫啥的,感觉还是蛮复杂的。
后来,终于搜到了个不错的:
https://github.com/petterobam/my-html2file
介绍:收集一系列html转文档的开源插件,做成html页面转文件的微服务集成Web应用,目前包含 html转PDF、html转图片、html转markdown等等。
功能:
网页转PDF(参用wkhtml2pdf插件)
网页转图片(参用wkhtml2pdf插件)
网页转Markdown(参用jHTML2Md)
网页转WORD(参用Apache POI)
这里我主要用到的网页转PDF这么一个功能,对应的插件是wkhtml2pdf。
1.1踩坑发现了一个不错的轮子了,感觉可行,于是就去下载来跑一下看看怎么样。启动的时候倒没有出错,但在调接口的时候,老是抛出异常。
于是就开始查一下路径,url有没有问题啦,查来查去发现都没问题啊。
后来才发现我的wkhtml2pdf.exe文件打不开,说我缺少几个dll文件。于是,我首先想到的是去wkhtml2pdf官网看看有没有相关的问题,想重新下载一个,但官网都进不去...(不是墙的问题)
https://wkhtmltopdf.org/
(ps:一个周末过去了,发现又能打开了。)
好吧,于是就去找‘dll文件缺失怎么办’。后面发现,安装一下Visual C++ Redistributable for Visual Studio 2015就好了(没有网上说得那么复杂)
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145
完了之后,发现可以将一个HTML转成PDF了,效果还不错:
有目录
可复制粘贴
可跳转到链接
清晰度好评
缺点:
页面加载速度慢的HTML,图片还没加载出来就已经生成PDF了
所以我选用了博客园(速度快)
在PDF的末尾有好几页不相关的(评论,广告啥的)
本来想着能不能只截取HTML博文的部分啊(评论,广告和其他不相关的不截取)。于是就去搜了一下,感觉是挺麻烦的,自己做了几次试验都没弄出来,最后放弃了。
后来又想了一下,我不是有一个没有广告的博客平台吗,刚好可以拿来用了。但是,我自己写完的markdown是没有全部保存在硬盘上的,后来发现简书可以下载已发布文章的所有markdown。
下载下来的文章,我想全部导入到之前那个无广告的博客平台上。但发现导出来的markdown没有高亮语法..
// 没有语法高亮咋看啊,所以到这里我就放弃了,将就用一下博客园生成的PDF吧
1.2爬虫学习上面GitHub提供的接口是一个URL生成一个PDF文件,我是不可能一个一个将链接和标题放上去生成的(因为博客园上发的也将近200篇了)。
而我是一点也不会爬虫的,于是也去搜了一下Java的爬虫轮子,发现一个很出名(WebMagic)
https://github.com/code4craft/webmagic
于是就跟着文档学习,也遇到了坑...文档给出的版本是0.7.3,我使用的JDK版本是8,用它的例子跑的时候抛出了SSLException异常(然而网上的0.6.x版本是没有问题的)
折腾完折腾去,也找到了0.7.3版本在JDK8上如何解决SSLException异常的办法了:
http://www.cnblogs.com/vcmq/p/9484418.html
修改HttpClientDownloader和HttpClientGenerator这两个类的部分代码就好了。
但是,我还是死活写不出能用的代码出来(真的菜!)..后来去问了一下同事(公众号:Rude3Knife)咋搞,他用Python几分钟就写好了。
def get_blog_yuan(blog_name, header): for i in range(1, 6): url = "https://www.cnblogs.com/" + blog_name + "/default.html?page=" + str(i) r = requests.get(url, headers=header, timeout=6) selector = etree.HTML(r.text) names = selector.xpath("//*[@class="postTitle"]/a/text()") links = selector.xpath("//*[@class="postTitle"]/a/@href") for num in range(len(names)): print(names[num], links[num]) time.sleep(5)
我也不纠结了..直接用他爬下来的数据吧(:
WebMagic中文文档:
http://webmagic.io/docs/zh/
最后最后我就生成了好多PDF文件了:
// 这篇文章简单记录下我这个过程吧,还有很多要改善的[//假装TODO]。如果你遇到过这种需求,有更好的办法的话不妨在评论区下告诉我~~
WebMagic我的Demo还没写好!!!如果有兴趣或者用过WebMagic的同学,有空的话不妨也去爬爬我的博客园的文章,给我一份代码(hhhhh)
分析可能的原因:博客园反爬虫or爬取规则没写好
部门的前辈建议我去了解一下机器学习,我也想扩展一下眼界,所以这阵子会去学一下简单的机器学习知识。(当然啦,我后面也会补笔记的)
乐于分享和输出干货的Java技术公众号:Java3y。关注即可领取海量的视频资源!
文章的目录导航:
https://github.com/ZhongFuCheng3y/3y
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72652.html
摘要:比上面的稍微好点,支持了一些方面的东西,具体看这个中文配置参数评价这种方法前端实现,灵活简单,而且在页面还原上是很好的,生成的过程不需要自己操心,页面样式还可控,可以说是非常不错的。 最近要搞前端html转pdf的功能。折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区。经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各有优...
摘要:比上面的稍微好点,支持了一些方面的东西,具体看这个中文配置参数评价这种方法前端实现,灵活简单,而且在页面还原上是很好的,生成的过程不需要自己操心,页面样式还可控,可以说是非常不错的。 最近要搞前端html转pdf的功能。折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区。经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各有优...
摘要:比上面的稍微好点,支持了一些方面的东西,具体看这个中文配置参数评价这种方法前端实现,灵活简单,而且在页面还原上是很好的,生成的过程不需要自己操心,页面样式还可控,可以说是非常不错的。 最近要搞前端html转pdf的功能。折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区。经过一番调(sou)研(suo)发现html导出pdf一般有这几种方式,各有各有优...
摘要:由于公司项目需要,图片与文件需要存到数据库而存本地,前端用的,后端是接口的方式,只能选择这种方式,而且也方便可以存各种格式。下安装官网大家可以点进去,然后里面有介绍安装方法如何使用。 由于公司项目需要,图片与文件需要存到数据库而存本地,前端用的react,后端 是接口的方式,只能选择base64这种方式,而且也方便可以存各种格式。 1.React下react-pdf-js安装官网 大家...
摘要:最近碰到个需求,需要把当前页面生成,并下载。但这并不是真的截图,而是通过遍历页面结构,收集所有元素信息及相应样式,渲染出。由于只能将它能处理的生成,因此渲染出来的结果并不是与原来一致。 最近碰到个需求,需要把当前页面生成pdf,并下载。弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) 项目源码地址:https://github.com/linwalker/... html2...
阅读 3015·2021-09-03 10:33
阅读 1174·2019-08-30 15:53
阅读 2598·2019-08-30 15:45
阅读 3360·2019-08-30 14:11
阅读 512·2019-08-30 13:55
阅读 2566·2019-08-29 15:24
阅读 1877·2019-08-26 18:26
阅读 3539·2019-08-26 13:41