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 |