网站的docs页面转mobi文件到kindle看,这是最后一篇有关电子书的了哦

377 阅读4分钟

学习新的东西不少类似

https://flutter.cn/docs  
https://dart.cn/guides

这样的网址上面不少文档要读,当你需要不在电脑面前时候阅读,最好的东西还是kindle,这个工具可以帮你完成这个想法,虽然可能不是那么的通用,毕竟每个网页都不一样,但是有一点点会找规律的技巧就行了。不会太复杂,也就是根据你想要的网页,查看source code 找到几个key words ,当作参数就好了。

先看看效果。 网站页面

image.png 真机页面 8def4fb182b660cd447b9d790daf1bd.jpg kindle截图

screenshot_2022_03_04T12_07_58+0800.png

mobi格式里面包含了网站图片,所以文件还是比较大的。

调用的代码如下。

image.png

如果不是特别特殊的文件,基本上 上面三行就可以解决问题。 继承与DocsParser的类名随便起一个,对应你要生成的网站,主要是类的四个参数,下面一一说明参数 第一个是 网站地址 ,也就是总的页面的起始页面 例如这里是 flutter.cn/docs 第二个是 网页类似frame结构的正文部分的关键标记,刨去 侧边目录和上边的之后的结果,具体内容看图。

image.png

查找办法 网页页面右键 选择 检查菜单 调出来 右侧的源码界面

image.png

鼠标找到使得主题显示内容高亮的地方的外围上次标记,这里就是 container

第三个 是 左边栏目的每一个item对应的url的标记

image.png 这里就是 nav-link

第四个 是生成pdf大小的参数,默认A3,A5都可以。具体参数含义如下

#页面大小设置参考  大的设置A3 普通kindle A5 大小合适, 喜欢看小字可以选letter
page_ref ="""
   QPrinter::A0    5  841 x 1189 mm
    QPrinter::A1   6  594 x 841 mm
    QPrinter::A2   7  420 x 594 mm
    QPrinter::A3   8  297 x 420 mm
    QPrinter::A4   0  210 x 297 mm, 8.26 x 11.69 inches
    QPrinter::A5   9  148 x 210 mm
    QPrinter::A6   10 105 x 148 mm
    QPrinter::A7   11 74 x 105 mm
    QPrinter::A8   12 52 x 74 mm
    QPrinter::A9   13 37 x 52 mm
"""

然后 import 相应的父类 DocsParser

class testFluttercn(docs_parser.DocsParser):
   pass
testFluttercn("https://flutter.cn/docs","container","nav-link","A3").process()

就可以了。生成的屏幕输出类似下面

E:/source/python/code2pdfword/webdoc2mobi/flutter_cn_docs.py
要解析的网址:https://flutter.cn/docs
默认 图片偏移地址是上面的url,如果有偏移请调用setImgOffset 相对的path的头例如设置为域名
正文内容标签,不包含侧边栏:container
侧边栏的超链接包含的项:nav-link
开始处理 计时开始
获取所需URL中所有item链接
!!!可能需要根据不同项目重写的函数 checkValidUrl  和 checkLocalImageStorage !!!
..................
..................

正在解析 item:https://flutter.cn/docs/about
----------------
关于 Flutter 文档中文版
----------------
正在解析 item:https://flutter.cn/docs/docs/get-started/install
----------------
安装和环境配置
----------------
正在解析 item:https://flutter.cn/docs/docs/get-started/editor
----------------
编辑工具设定
----------------
正在解析 item:https://flutter.cn/docs/docs/get-started/test-drive
----------------
开发体验初探
----------------
..................
..................

----------------
保存到文件 
生成的文件名为:flutter_cn_docs_A3.pdf
转换pdf完成
..................
..................


#把页面链接里面的地址修改为绝对地址,并按目录结构下载到本地。
https://flutter.cn/docs/assets/images/docs/tools/android-studio/main-toolbar.png
/assets/images/docs/tools/android-studio/main-toolbar.png
https://flutter.cn/docs/assets/images/docs/get-started/ios/starter-app.png
/assets/images/docs/get-started/ios/starter-app.png
https://flutter.cn/docs/assets/images/docs/get-started/hot-reload.svg
/assets/images/docs/get-started/hot-reload.svg
https://flutter.cn/docs/assets/images/docs/tools/vs-code/device_status_bar.png
/assets/images/docs/tools/vs-code/device_status_bar.png
https://flutter.cn/docs/assets/images/docs/get-started/ios/starter-app.png
/assets/images/docs/get-started/ios/starter-app.png
https://flutter.cn/docs/assets/images/docs/get-started/hot-reload.svg
/assets/images/docs/get-started/hot-reload.svg
https://flutter.cn/docs/assets/images/docs/get-started/ios/starter-app.png
/assets/images/docs/get-started/ios/starter-app.png



*************************************************************
 Amazon kindlegen(Windows) V2.9 build 1029-0897292 
 命令行电子书制作软件 
 Copyright Amazon.com and its Affiliates 2014 
*************************************************************

信息:I9007:选项:-c2:Kindle Huffdic 压缩
........................
........................

信息(prcgen):I15000:可交付标准Mobi文件大小约为:  0015845KB
信息(prcgen):I15001:  KF8 可交付文件大小约为:  0016328KB
信息(prcgen):I1037: 创建 Mobi 域名文件出现警告!
总共耗时:589.465139 秒
总共:142个链接

生成文件 html mobi和 pdf三种

image.png

如果是结构稍微特别的 覆写函数 checkValidUrl 部分特殊处理下即可,只需如下几行代码就可以了,不用修改父类


class testDartcn(docs_parser.DocsParser):
   def checkValidUrl(self, li):
      url=""
      if not 'http' in li.a.get('href') and not '#' in li.a.get('href'):
         url = imgOffset + li.a.get('href')
      return url
      
testDartcn(parserUrl, contentString, navItemString, page_set).setImgOffset(imgOffset).process()

具体代码参考 gitee.com/gammergr/co… 下的目录 webdoc2mobi 目录,因为生成的mobi 带图片,一般比较大,大家手动copy到机器就好了,就不做send mail的脚本了。