2010-06-25 30 views
23

我正尝试在python中为iBook创建epub上传器。我需要一个python库来提取图书信息。在我自己实现这个之前,我想知道是否有人知道一个已经做好的python lib。提取'epub'信息的Python库

+2

我投票离开这个问题公开,因为它似乎在询问的时候,没有库来实现所需的功能,我认为接受的答案包含有价值的代码。 – 2013-12-05 09:09:24

+0

评论是不适合你的,但对于投票结束这个问题的人来说。没有理由不接受答案,特别是它解决了你的问题。 – 2013-12-10 13:42:59

+0

关闭并不意味着删除,答案是吸引链接只有答案,并可能在未来的垃圾邮件。 – bummi 2015-05-11 05:19:02

回答

35

一个.epub文件是包含META-INF目录,其中包含一个名为container.xml中的文件,它指向通常命名为Content.opf另一个文件,它索引的所有其他文件,这构成了一个zip编码文件电子书(摘要基于http://www.jedisaber.com/eBooks/tutorial.asp;完整规范在http://www.idpf.org/2007/opf/opf2.0/download/

以下Python代码将从.epub文件中提取基本元信息并将其作为字典返回。

import zipfile 
from lxml import etree 

def get_epub_info(fname): 
    ns = { 
     'n':'urn:oasis:names:tc:opendocument:xmlns:container', 
     'pkg':'http://www.idpf.org/2007/opf', 
     'dc':'http://purl.org/dc/elements/1.1/' 
    } 

    # prepare to read from the .epub file 
    zip = zipfile.ZipFile(fname) 

    # find the contents metafile 
    txt = zip.read('META-INF/container.xml') 
    tree = etree.fromstring(txt) 
    cfname = tree.xpath('n:rootfiles/n:rootfile/@full-path',namespaces=ns)[0] 

    # grab the metadata block from the contents metafile 
    cf = zip.read(cfname) 
    tree = etree.fromstring(cf) 
    p = tree.xpath('/pkg:package/pkg:metadata',namespaces=ns)[0] 

    # repackage the data 
    res = {} 
    for s in ['title','language','creator','date','identifier']: 
     res[s] = p.xpath('dc:%s/text()'%(s),namespaces=ns)[0] 

    return res 

输出示例:

{ 
    'date': '2009-12-26T17:03:31', 
    'identifier': '25f96ff0-7004-4bb0-b1f2-d511ca4b2756', 
    'creator': 'John Grisham', 
    'language': 'UND', 
    'title': 'Ford County' 
} 
+0

谢谢,这可以按我的预期工作。 – xiamx 2010-06-26 21:38:15

+0

这两个链接都被打破。 – OliasailO 2016-03-11 23:33:24

3

例如epub-tools,例如?但这主要是写作epub格式(来自各种可能的来源),如epubtools(类似的拼写,不同的项目)。对于阅读它,我想尝试的伴侣项目threepress,可能会显示在浏览器的epub电子书一个Django应用程序 - 没有看过的代码,但我想,为了表明这本书那肯定首先是能够阅读;-)。

+0

epub-tools和epubtools似乎是epub生成器。 – xiamx 2010-06-26 21:31:03

+0

@xiamx,是的,“主要是关于写作”,正如我所说 - 所以,你有没有尝试三键代码? – 2010-06-27 02:08:28

2

我结束了在这里寻找类似的东西后,被博思韦尔先生的代码片段启发,开始我自己的项目。如果有人有兴趣... http://epubzilla.odeegan.com/

+0

相当有用你链接 – embert 2014-04-20 13:20:54