处理某些目录网页不能被calibre解析的方法
来源:互联网 发布:有哪些动画培训班知乎 编辑:程序博客网 时间:2024/05/24 07:36
编写calibre的recipe脚本,来下载并制作电子书是一个很方便而适用的好方法。但有的时候也会让你觉得郁闷的要命。面对一个书的目录页面,无论你如何修改recipe程序,calibre就是无法正确地解析页面,形成下载的种子。
仔细分析后发现,这些页面多数都是有一些特殊的字符或者处理办法,目的就是干扰使用程序自动下载图书。页面是在网站上的,我们无法进行修改和处理。那么是不是就没有办法还下载了呢?
“山不过来我过去”,反正我只是为了下载电子书的内容,何不把目录页面下载到本地,直接读本地文件,生成feed呢。下载到本地的目录页面文件尽可以按我们的要求进行修改,保证calibre的解析正确,能够生成正确的feed,方便calibre进行下载。而修改一个目录页面的工作量不是很大,只要知道一点html语法,很容易就可以实现。
经过几次尝试,发现这个办法非常成功,只要在index_to_soup方法中把url写成file:///加上自己保存目录页面的路径和文件名。其实如果你不知道如何写的话,直接用浏览器打开这个文件,然后把地址栏的内容复制,粘贴到index_to_soup中url的位置,当然引号是不能少的。这样就没有任何问题了。原来index_to_soup中是仿浏览器来下载和分析目录页面,生成beatifulsoup结构的,所以浏览器能正确打开,calibre也就可以了。其它的编写方法可以不用任何修改。下载到本地的页面文件你尽可以自己进行整理和修改,保证不再有那些干扰的内容,还可以去掉那些多余的章节(许多时候都会有一些冗余的章节,或者广告章节,尽可以直接从页面中删除)。
事实上,这个办法不仅可以对付那些有干扰内容的页面,如果 你会一点基地的页面html语法,还可以自己写一个所谓目录页面,把不同网页、不同网站的内容都写在一个文件中,这样,你还可以通过用calibre下载来自己制作一本混合了许多网站内容的“合集”电子书。当然,这时每个网站“书籍内容”页面的过滤设定都有是一样的,即keep_tag和remove_tag对每个网站都是一样的,尤其是keep_tag,如果设置不当,可能就过滤掉了一些网站的见容页了,在生成的电子中,这些章节的内容为空。为了保险起见,建议keep_tag不设置,remove_tag可以设置,如果不存在相应的tag,是不起作用的,存在的话就会被过滤掉。
同样,你也可以指定一个本地的图片文件为书籍的封面,只要把封面的url同样处理就可以。
当然,如果你不怕麻烦,也可以直接把每篇文章的标题和url直接写进recipe中的feeds,不过这样太麻烦,而且不太好修改,不如放入一个目录页面文件中方便了。想怎么修改就怎么修改,不再需要修改recipe文件了,也很灵活。
我已经用这种方法制作了不少epub电子书了,合集也有不少。希望这个方法对大家也有用。
- 处理某些目录网页不能被calibre解析的方法
- 某些网页无法保存时的方法
- 解决某些网页不能访问
- 商品列表页面的某些方法处理
- 使用calibre制作带目录的mobi电子书
- vc编译错误:不能解析某些函数的解决方法
- Mybatis不能正确解析typeAliases问题的处理方法
- 某些不能被应用使用的权限
- xml配置文件不能被正确解析的特殊符号的处理方法
- 解决方案:某些网页Firefox不能记住密码
- 解决方案:某些网页Firefox不能记住密码
- apache禁止访问某些文件或目录的方法
- 有用的meta设置解决网页内容不能适应某些浏览器宽度的问题
- 微信内网页某些安卓手机不能上传图片文件的问题(1)
- 微信内网页某些安卓手机不能上传图片文件的问题(2)
- 关于js中dom对象不支持某些方法的处理
- SELinux阻止某些程序运行的处理方法
- 破解网页不能复制的方法
- 手把手教你做视频播放器(五)-视频列表的横屏
- SCI/EI论文写作常用句型
- [构造] UNR #1 Jakarta Skyscrapers
- UIButton超出UIView边界不可点击
- [李景山php]thinkphp核心源码注释|Html.class.php
- 处理某些目录网页不能被calibre解析的方法
- 智能指针使用指南
- 配置python的pandas包
- [李景山php]thinkphp核心源码注释|File.class.php
- APACHE-CXF demo
- 基于海思的H265码流实时传输系统设计
- Bitmap的四种属性,与每种属性对应的大小
- [下界最小流] UNR #1 奇怪的线段树
- mysql workbench 错误 No database selected Select the default DB to be used by double-clicking its nam