2010-06-25 41 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