JAVA抓取网页内容、生成kindle支持的mobi格式的文件时可能会遇到的问题及解决方案...

问题1:内容抓取Batch在解析rss时,有的网站的rss中明明有发布时间,但获取的发布时间始终为null。


原 因:那些网站的rss的发布时间格式不符合Rome.jar的要求,无法解析,所以返回null。

解决方案:修改Rome.jar的源码,在com/sun/syndication/rome.properties中增加
             datetime.extra.masks属性,用于适应多种发布日期的格式。
             如: datetime.extra.masks=yyyy-MM-dd HH:mm:ss|yyyy-MM-dd HH:mm|EEE, dd MMM yy HH:mm:ss|yyyy-MM-dd HH:mm:ss.SSS
             修改源码后重新打jar包,引用到JAVA工程中,就可以解析不同格式的发布时间了。

-------------------------------------------------------------------------------------------

问题2:抓取某些网页时,会提示编码错误,如:
         org.htmlparser.util.EncodingChangeException:character mismatch (new: [0xfeff] != old: [0x9518锘]) for encoding change from ISO-8859-1 to gbk at character offset 214

原 因:如果请求url返回的页面上中文的title写在了meta的前面,而且这个meta里设置的charset编码信息(gbk)又和parser默认的编码(ISO-8859-1)不一样,那么就会报这个错。
        但是如果meta之前没有任何中文,那么就不会报这个错。因为htmlparser本身会根据html源码中的charset信息设置编码。

解决方案:捕捉到这个异常后,使用meta里设置的charset编码重新抓取一遍

-------------------------------------------------------------------------------------------

问题3:epub生成Batch在Linux环境下使用kindlegen工具把epub文件转换成mobi文件时,没有出现任何异常,但也没有生成mobi文件。

原因:不明

解决方案:

Process process = Runtime.getRuntime().exec(kindlegen命令);
InputStream is = process.getInputStream();
int r;
while(-1 != (r = is.read())) {
    System.out.print((char)r);
}

把InputStream的值打印出来之后就可以生成mobi文件了。

-------------------------------------------------------------------------------------------

问题4:抓取的网页内容中有时含有被抓取的网站自己的JS函数、视频链接等代码,从而显示在浏览器上时可能会提示JS错误

解决方案:过滤掉所有的script、style、link等标签,以及所有标签的事件(如:onclick、onmouseover等)

-------------------------------------------------------------------------------------------

问题5:生成的mobi文件在kindle paperwhite设备上不能被识别为电子书

原因:1、缺少内容源目录文件以及在opf文件的guide节点中对目录文件的定义,所以Kindle设备无法显示其目录。
       2、kindle paperwhite会把报刊、杂志类型的mobi文件自动转换成pobi文件,其他类型的mobi文件不会转换。

解决方案:1、增加内容源目录文件和opf文件中对目录的引用
             2、要让kindle paperwhite识别报刊、杂志类型的mobi文件,必须有以下几处设置:
                 1、在opf文件的metadata里增加如下代码:

<x-metadata> 
	<output encoding="utf-8" content-type="application/x-mobipocket-subscription-magazine"></output>
</x-metadata>

                    2、在ncx里按照要求把navpoint 写成

<navpoint class="periodical">
          <navpoint class="section">
              <navPoint class="article" >
......

                这几个class一定要写,而且class的值必须分别是periodicalsection和article,否则不行每个navpoint标签内必须要有content标签,否则使用kindlegen生成mobi文件时会报错。

转载于:https://www.cnblogs.com/kzby2003/p/4076950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值