Python库提取'epub'信息

时间:2010-06-25 00:12:10

标签: python epub ibooks

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

4 个答案:

答案 0 :(得分:40)

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

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

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'
}

答案 1 :(得分:3)

例如epub-tools之类的东西?但这主要是关于 epub格式(来自各种可能的来源),epubtools(类似的拼写,不同的项目)。对于阅读它,我会尝试使用伴侣项目threepress,一个用于在浏览器上显示epub书籍的Django应用程序 - 没有查看该代码,但我想这是为了顺序为了展示这本书,它必须首先能够阅读它; - )。

答案 2 :(得分:2)

查看epub module。这看起来很简单。

答案 3 :(得分:2)

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