个人成长秘籍之三,每天用Python强迫自己看两页书

2020-02-07 20:51:28 3点赞 20收藏 0评论

昨天的<文章>中提到最常用的epub电子书其实是个zip压缩文件,而且已经拿到了书名和作者名,那今天我们就直接取出书的内容。

epub文件里除了opf文件存放书的相关信息外,还有一个ncx文件存放了目录结构,它的内容类似这样

<?xml version='1.0' encoding='utf-8'?>

<ncx xmlns="/z3986/2005/ncx/" version="2005-1" xml:lang="zho">

<head>

<meta content="4" name="dtb:depth"/>

</head>

<docTitle>

<text>书名</text>

</docTitle>

<navMap>

<navPoint class="chapter" id="num_1" playOrder="1">

<navLabel>

<text>前言</text>

</navLabel>

<content src="part0001.html"/>

</navPoint>

<navPoint class="chapter" id="num_2" playOrder="2">

<navLabel>

<text>扉页</text>

</navLabel>

<content src="part0002.html"/>

</navPoint>

英文好的同学又能一眼看出它的结构了。其它的我们先不管,navMap就是导航地图的缩写,navPoint就是章节,content的src就是每页的html文件。了解这点就足够,没必要读xml和dtd等这些信息,xpath直接搞定

def extract_outline(self, f):

with self.book.open(f) as ncx:

try:

c = ncx.read().decode('utf-8')

c = c.replace('n', '').encode('utf-8')

self.outline_file = etree.HTML(c)

outlines = self.outline_file.xpath('//navpoint')

for o in outlines:

chapter = o.find('navlabel').find('text').text

if chapter:

self.outline[chapter] = o.find('content').get('src')

except Exception as e:

print(e)

lxml似乎对xml比较挑剔,用xpath拿不到结果。好在它也支持html,用小写的navpoint就可以取到所有的章节了。我们存放在一个dict里就好。下面就是遍历这个dict,在zip里找到对应的文件。但按道理来说,我们应该回到opf文件,找到对应的目录,然后去找。但最近老不出门,小编比较暴躁。反正一本书就是那些页面,我不相信有重复文件,直接遍历下文件列表,只要文件名相同,就肯定是了。

def get_page(self, page_num):

page = list(self.outline.keys())[page_num - 1]

for f in self.book.filelist:

if self.outline[page] == f.filename.split('/')[-1]:

with self.book.open(f) as p:

html = etree.HTML(p.read().decode('utf-8').replace('n', '').encode('utf-8'))

for e in html.xpath('//*'):

if e.text:

print(e.text)

page_num不应该大于目录dict()的大小,找到对应文件后,可以直接返回html,也可以象我一样用lxml转成text

回到主题,如何强迫自己看书呢。象上次我在<这篇文章>里讲的那样,建一个计划任务,每天发送两章到自己的邮箱就好了, 强迫症的你肯定不会允许未读邮件的存在吧。

展开 收起

iReader 掌阅 Ocean 4C 7英寸 电子书阅读器 64GB 星际黑

iReader 掌阅 Ocean 4C 7英寸 电子书阅读器 64GB 星际黑

1669元起

Hanvon 汉王 N10 Pro 10.3英寸 电子书阅读器

Hanvon 汉王 N10 Pro 10.3英寸 电子书阅读器

2279元起

汉王clear7 Turbo电纸书阅读器8核墨水屏电子书 电子笔记本 便携阅读看书漫画

汉王clear7 Turbo电纸书阅读器8核墨水屏电子书 电子笔记本 便携阅读看书漫画

1599元起

BOOX文石P6小白马6.13英寸墨水屏阅读器电纸书 类手机尺寸 智能护眼看书阅读电子纸小屏电子书口袋阅 发布

BOOX文石P6小白马6.13英寸墨水屏阅读器电纸书 类手机尺寸 智能护眼看书阅读电子纸小屏电子书口袋阅 发布

1699.15元起

iFLYTEK 科大讯飞 XF-DX-BH82E 智能办公本Air 2 黑色

iFLYTEK 科大讯飞 XF-DX-BH82E 智能办公本Air 2 黑色

2699元起

汉王(Hanvon)Clear6 Plus 6英寸电子书阅读器 墨水屏电纸书 智能阅读本电子纸 看书学习便携 碧水青4+32G

汉王(Hanvon)Clear6 Plus 6英寸电子书阅读器 墨水屏电纸书 智能阅读本电子纸 看书学习便携 碧水青4+32G

669元起

汉王智能手写办公本M10mini 8.2英寸语音转写电子书阅读器 墨水屏电纸书 电子笔记本

汉王智能手写办公本M10mini 8.2英寸语音转写电子书阅读器 墨水屏电纸书 电子笔记本

2599元起

掌阅iReader【发布】Smart 5C 彩屏阅读本 电子书阅读器 智能电纸书 便携阅读电子本

掌阅iReader【发布】Smart 5C 彩屏阅读本 电子书阅读器 智能电纸书 便携阅读电子本

3549元起

BIGME 大我 B751C 7英寸彩色墨水屏智能办公本墨水屏电子书阅读器平板手写本电纸书电子笔记本电子纸

BIGME 大我 B751C 7英寸彩色墨水屏智能办公本墨水屏电子书阅读器平板手写本电纸书电子笔记本电子纸

1549元起

iReader 掌阅 Smart 5 Pro 电子书阅读器 128GB 曜岩黑

iReader 掌阅 Smart 5 Pro 电子书阅读器 128GB 曜岩黑

2939元起

作业帮学练机S30 真题教材同步练 墨水护眼屏真题试卷18亿+题库 电纸书学习机 10.3英寸 4+64G

作业帮学练机S30 真题教材同步练 墨水护眼屏真题试卷18亿+题库 电纸书学习机 10.3英寸 4+64G

2999元起

Kindle Colorsoft 7英寸彩色屏幕8周续航 Kindle 2024阅读器电纸书 32GB( 全新未拆封)

Kindle Colorsoft 7英寸彩色屏幕8周续航 Kindle 2024阅读器电纸书 32GB( 全新未拆封)

3470元起

BOOX 文石 T10C 电子书阅读器 128G 黑色

BOOX 文石 T10C 电子书阅读器 128G 黑色

3479元起

Kindle Touch 11代 电子书阅读器 电纸书 墨水屏 6英寸 WiFi 16G 持久续航 抹茶绿【2024】

Kindle Touch 11代 电子书阅读器 电纸书 墨水屏 6英寸 WiFi 16G 持久续航 抹茶绿【2024】

1179元起

文石BOOX Leaf3 7英寸电子书阅读器平板 墨水屏电纸书电子纸 便携阅读看书学习 智能办公电子笔记本

文石BOOX Leaf3 7英寸电子书阅读器平板 墨水屏电纸书电子纸 便携阅读看书学习 智能办公电子笔记本

1424.05元起

掌阅iReader Ocean4 电子书阅读器 墨水屏电纸书电子纸 看书学习便携本

掌阅iReader Ocean4 电子书阅读器 墨水屏电纸书电子纸 看书学习便携本

1288.4元起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
20
扫一下,分享更方便,购买更轻松