用于提取“epub”信息的 Python 库

新手上路,请多包涵

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

原文由 xiamx 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

.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 文件中提取基本元信息并将其作为字典返回。

 import zipfile
from lxml import etree

def epub_info(fname):
    def xpath(element, path):
        return element.xpath(
            path,
            namespaces={
                "n": "urn:oasis:names:tc:opendocument:xmlns:container",
                "pkg": "http://www.idpf.org/2007/opf",
                "dc": "http://purl.org/dc/elements/1.1/",
            },
        )[0]

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

    # find the contents metafile
    cfname = xpath(
        etree.fromstring(zip_content.read("META-INF/container.xml")),
        "n:rootfiles/n:rootfile/@full-path",
    )

    # grab the metadata block from the contents metafile
    metadata = xpath(
        etree.fromstring(zip_content.read(cfname)), "/pkg:package/pkg:metadata"
    )

    # repackage the data
    return {
        s: xpath(metadata, f"dc:{s}/text()")
        for s in ("title", "language", "creator", "date", "identifier")
    }

示例输出:

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

原文由 Hugh Bothwell 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Alex Martelli 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏