个人成长秘籍之三,每天用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 掌阅 Color7 彩色墨水屏 7英寸电纸书阅读器

iReader 掌阅 Color7 彩色墨水屏 7英寸电纸书阅读器

1689元起

Hanvon 汉王 Clear 7 墨水屏电子书阅读器 4GB+64GB 灰色

Hanvon 汉王 Clear 7 墨水屏电子书阅读器 4GB+64GB 灰色

1389元起

Hanvon 汉王 N10touch智能办公本10.3英寸电纸书电子书阅览器

Hanvon 汉王 N10touch智能办公本10.3英寸电纸书电子书阅览器

2530元起

Hanvon 汉王 Clear 7英寸 墨水屏电子书阅读器 32GB 灰色

Hanvon 汉王 Clear 7英寸 墨水屏电子书阅读器 32GB 灰色

1259元起

BOOX 文石 Leaf3C 7英寸 墨水屏电子书阅读器 4GB+64GB 黑色

BOOX 文石 Leaf3C 7英寸 墨水屏电子书阅读器 4GB+64GB 黑色

1839元起

iReader 掌阅 Ocean3 Turbo 7英寸 墨水屏电子书阅读器 Wi-Fi 4+64GB 黑色

iReader 掌阅 Ocean3 Turbo 7英寸 墨水屏电子书阅读器 Wi-Fi 4+64GB 黑色

1569元起

BOOX 文石 Leaf3 7英寸 墨水屏电子书阅读器 WiFi 3GB+32GB 黑色

BOOX 文石 Leaf3 7英寸 墨水屏电子书阅读器 WiFi 3GB+32GB 黑色

1452元起

BOOX 文石 Tab10C 10.3英寸 墨水屏电子书阅读器 Wi-Fi 4GB+128GB 蓝色

BOOX 文石 Tab10C 10.3英寸 墨水屏电子书阅读器 Wi-Fi 4GB+128GB 蓝色

3449元起

掌阅iReader Neo2 高清智能阅读本 电纸书阅读器 高刷智能电子书平板 轻量便携

掌阅iReader Neo2 高清智能阅读本 电纸书阅读器 高刷智能电子书平板 轻量便携

969元起

BOOX 文石 Tab10C Pro 10.3英寸 墨水屏电子书阅读器 Wi-Fi 6GB+128GB 蓝色

BOOX 文石 Tab10C Pro 10.3英寸 墨水屏电子书阅读器 Wi-Fi 6GB+128GB 蓝色

4179.05元起

Hanvon 汉王 N10 10.3英寸墨水屏电子书阅读器 32GB WiFi

Hanvon 汉王 N10 10.3英寸墨水屏电子书阅读器 32GB WiFi

1849元起

BOOX 文石 Poke5 6英寸 墨水屏电子书阅读器 2GB+32GB 黑色

BOOX 文石 Poke5 6英寸 墨水屏电子书阅读器 2GB+32GB 黑色

778元起

Hanvon 汉王 N10 mini 2024款 7.8英寸墨水屏电子书阅读器 2GB+32GB 灰色

Hanvon 汉王 N10 mini 2024款 7.8英寸墨水屏电子书阅读器 2GB+32GB 灰色

1899元起

Xiaomi 小米电纸书 7英寸 64GB

Xiaomi 小米电纸书 7英寸 64GB

1419元起

汉王 Clear 6 6英寸电子墨水屏阅读器

汉王 Clear 6 6英寸电子墨水屏阅读器

679元起

小猿 XY-XLJ-01 10.3英寸 墨水屏电子书阅读器 4GB+64GB 银色

小猿 XY-XLJ-01 10.3英寸 墨水屏电子书阅读器 4GB+64GB 银色

3799元起
0评论

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

取消
确认
评论举报

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

相关文章推荐

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