Python

[Python] epub, ebook(전자책) 파일 읽기

수노 SUNHO 2017. 10. 30. 15:04

zipfile, beautifulsoup을 이용하여 전자책 epub 파일 읽기

import os
import zipfile
from bs4 import BeautifulSoup as BS

방법1

# 방법1: 저장하지 않고 바로 읽기
for file in os.listdir("/paty/to//your_folder"):
with zipfile.ZipFile('/paht/to/{}.epub'.format(file), 'r') as zf:
zipInfo = zf.infolist()

for member in zipInfo:
if 'OEBPS' in member.filename:
lxml = BS(zf.read(member.filename), 'lxml')
# print(a)
body_book = lxml.find_all('body', attrs={'class': 'book'})

for p in body_book:
print(p.text)
zf.close()

1. os.listdir()을 이용하여 해당 폴더에 있는 파일들을 다 꺼낼 수 있다

2. epub은 css, xml 등을 압축해 놓은 파일이기 때문에 압축을 해제한다

3. infolist()를 사용하면 epub 내부에 있는 파일 목록을 불러올 수 있다
# infolist() 출력 결과
[<ZipInfo filename='mimetype' file_size=20>, <ZipInfo filename='OEBPS/chapter1.xhtml' compress_type=deflate file_size=37020 compress_size=11816>, ...]

4. if문을 활용하여 전체 파일 중 member.filename에 OEBPS가 포함되는 것만 꺼내서 썼다

5. BeautifulSoup으로 .xhtml 파일을 파싱하여 원하는 요소들을 꺼내 쓴다.


방법2

# 방법2: epub 파일 내용을 몽땅 저장!
zf = zipfile.ZipFile('/path/to/your_file.epub')
zf.extractall('/path/to/save/folder_name')

그냥 통째로 다 저장하고 싶을 때 쓰면 된다.


'Python' 카테고리의 다른 글

#39;s 인코딩 에러  (0) 2019.03.17
Gmail API 활용시, 헤맸던 부분  (0) 2019.03.17
[Python] 순열 만들기  (0) 2017.10.27
[Python] 페이징 처리하기  (0) 2017.10.24
[Python] Query String을 Dictionary로 바꾸기  (0) 2017.10.12