파이썬을 이용하여 웹 크롤링(Crawling)을 구현한다. 크롤링으로 가져온 html데이터에서 텍스트 파싱하여 활용하고자하는 정보를 선별하여 추출한다.


성경(聖經)은 통상 기독교 또는 유대교 신앙의 최고 경전을 일컫는다. 성경은 구약성경과 신약성경으로 이루어져 있으며 각각 히브리어와 그리스어로 씌인 원본을 번역한 형태로 각 국가에서 사용하고 있다. 대한민국의 경우 2015년 현재 가장 많이 사용하는 역본은 ‘개역개정 4판(대한성서공회)’, ‘표준새번역(대한성서공회)’ 등이 있으며 그 밖에도 ‘현대인의 성경(생명의 말씀사)’, ‘우리말 성경(두란노)’, ‘메세지 성경(복있는 사람)’ 등의 다양한 역본이 존재한다. 이렇게 다양한 역본은 각각 출판사의 저작물로 등록되어 책으로 출판되고, 최근에는 스마트폰 어플리케이션 형태로 출시되고있다.

아이폰 앱스토어의 갓피플 성경
아이폰 앱스토어의 갓피플 성경

온라인에서도 각 성경을 역본별로 열람할 수 있다. 이러한 서비스를 제공하는 홈페이지는 대표적으로 Holy-Bible 다국어 성경( http://www.holybible.or.kr ), YouVersion( https://www.bible.com/ko ), 대한성서공회(http://www.bskorea.or.kr )이 있으며, (사)정보통신선교회 약정에 의해 컨텐츠에 대한 저작권을 명시한 채 공유되고 있다. 크롤링 사용은 저작권과 관련하여 민감한 소지가 있다. 이러한 방법을 유포하여 이득을 취하려는 행위는 저작권법에 의거 처벌될 수 있으므로, 단지 개인 연구목적용으로만 사용할 것이며, 이미 저작권 보호 기간이 만료된 ‘개역 한글판’에 대하여 진행한다.

성경전서 개역한글판의 보호기간은 2011년 만료되었다.
성경전서 개역한글판의 보호기간은 2011년 만료되었다.

그럼 지금부터 상세 분석에 들어가도록 한다.

1) 홈페이지 구조 확인 : 먼저 웹 크롤링을 수행항 대상 홈페이지를 선정한다. 여기에서는 대한성서공회( http://www.bskorea.or.kr )를 이용하였다. 해당 홈페이지에서 확인할 수 있는 정보는 URL 입력 부분과 본문 TEXT 부분이다. URL의 구조를 분석하면 원하는 장/절 구분을 수행하는 쿼리(Qeury)를 추정할 수 있다. 또한, 본문 TEXT는 다수의 HTML 코드를 파싱하여 정확하게 원하는 Table id의 내용만을 추출하여 파일로 저장하도록 할 것이다.

URL 입력부분과 본문 부분을 나누어서 생각해보자
URL 입력부분과 본문 부분을 나누어서 생각해보자

2) URL 규칙 분석 :

해당 웹사이트에서 URL을 이용하여 쿼리를 보내는 규칙을 분석하였다.
해당 웹사이트에서 URL을 이용하여 쿼리를 보내는 규칙을 분석하였다.

위와 같은 형식의 주소에서 ~.aspx? 뒷 부분에 파라미터를 주는 방식임을 알 수 있다. 주요 파라미터는 4가지로 ① 역본명칭, ② 권, ③ 장, ④ 절 이고, 폰트를 설정하는 등의 기타 파라미터는 크롤링에 큰 영향을 미치지 않으므로 생략해도 무방하다. 해당 파라미터로 전달되는 변수값은 성경 본문의 정해진 규칙을 따른 것으로 확인되었다. 구체적인 매핑은 다음과 같다.

① 역본명칭

역본 명칭에 따른 파라미터
역본 명칭에 따른 파라미터

② 권 : 개신교에서 성경은 통상적으로 구약 39권, 신약 27권으로 총 66권만을 확고한 정경으로 인정하고 있다. 예를들어 구약의 첫번째 책인 ‘창세기’는 영어로 ‘Genesis’로 표기하고, 신약의 ‘로마서’는 ‘Romans’로 표기한다. 대한성서공회에서는 이 영문 이름의 첫 3글자를 약어로 사용하여 파라미터로 사용하고 있음을 확인하였다.

3) HTML 구조 분석 및 파싱 : 해당 페이지의 소스를 확인하기 위해서는 페이지를 html형태로 다운로드하거나, 구글 크롬 등의 브라우저에서 제공하는 ‘소스보기’기능을 활용한다. HTML 파일 안에는 다양한 내용이 포함되어 있으며, 웹페이지를 구성하기 위한 자바스크립트 코드가 섞여있다. 내용안에는 필요한 부분과 불필요한 부분이 다수 섞여있기 때문에 파싱을 통해 정확히 원하는 콘텐츠만 가져오는 것이 핵심이다. 


파싱할 HTML ID tag 확인
파싱할 HTML ID tag 확인


성경본문에 해당하는 내용은 HTML 1172번째 line부터 시작되며, id = “tbBible1” 을 사용하고 있다. 이 내용을 선별하여 긁어오면 된다.

4. 파이썬(Python 2.7) 소스코드 작성 :

① HTML 파싱하여 본문 추출 : 우선 웹 크롤링을 위해 사용할 파이썬 라이브러리를 다운로드(http://www.crummy.com/software/BeautifulSoup/)하고 설치한다. 이 라이브러리를 사용하면(import BeautifulSoup, urllib2) 본문 내용을 가져올 수 있다.



실행결과는 다음과 같다. 


② HTML 태그 제거 : 본문을 긁어왔으나, 다수의 html 태그로 인해 텍스트 식별이 어려운 상황이다. 우선 태그를 제거하고, 순수하게 본문 텍스트만 추려낼 필요가 있다. html태그는 모두 ‘<‘ 기호와 ‘>’ 사이에 존재하기 때문에 이러한 점을 이용하여 정규표현식을 사용할 수 있다. 정규표현식 라이브러리를 첨부하고(import re) 다음과 같은 함수를 작성한다. 


위에서 추출한 ‘chap’ 변수를 str로 타입변환을 수행한 후 remove_html_gags함수를 적용하면 다음과 같은 결과가 추출된다. 

조금 더 간결해진 결과
조금 더 간결해진 결과


점점 더 내용이 간결해지고 있다. 그러나 아직은 줄바꿈(개행)처리가 정확히 되지 않았고, 절 구분이 조금 더 명확할 필요가 있다. &nbsp;&nbsp;&nbsp; 같은 불필요한 내용도 처리하여야 한다.


최종 마무리 및 파일 출력 : 개행 구분을 조금 더 명확하게 하기위해 파이썬의 스트링 함수를 적절히 사용한다. 여기에서는 split 를 사용하 ‘\n’을 구분자로 하여 분류하고, 내용이 없는 공백 필드는 버리도록 한다. 또한 불필요한 &nbsp; 문자열을 역으로 이용하여 절을 잘라내는 기준선으로 삼고 내용을 읽어오도록 한다. 읽어온 내용은 절단위로 끊어서 텍스트 파일에 저장하도록 한다. 이상의 내용을 파이썬 함수형태의 코드로 작성하면 다음과 같다.

결과물은 다음과 같은 각 권 66개의 텍스트 파일이다. 

성경 파일들이 TXT로 저장되었다.
성경 파일들이 TXT로 저장되었다.

5. 전자책 제작하기 : txt 파일을 ePUB 포맷으로 저장해주는 다양한 도구가 있다. 이는 국제 디지털 출판 포럼(IDPF)에서 제정한 개방형 자유 전자서적 표준으로, 국내에서 교보문고, 리디북스 등의 업체에서 제공하는 전자책 Reader들이 이 포맷의 파일을 읽을 수 있다. 또한 Apple에서는 iBooks라는 애플리케이션을 통해 전자책 시장을 점유하고 있다. 전자책을 간단히 만들기 위해 kotxt2epub (Java 기반이므로, JRE 설치 필요)라는 프로그램을 이용하여 TXT 파일을 EPUB 형식으로 바꿀 수 있다. 또한, 목차 설정을 사용하기 위해 장이 시작되는 부분을 “*TOC&1장” 과 같은 형식으로 지정해 주면, 인덱싱이 되므로 편리하다. 

kotxt2epub
kotxt2epub

ePUB 형식으로 변환된 파일을 아이패드에 넣어서 iBooks로 열어본 화면이다. 

당부의 말씀 : 반드시 저작권에 유의하여야 하며, 법률상 저촉되지 않도록 활용하여야 한다. 이 포스트에서 설명한 내용은 대한성서공회의 저작권이 만료된 '개역한글판'을 기준으로 설명하였으며, 만약 이 프로그램을 사용하여 다른 역본으로 시도할 시 텍스트 본문의 구조가 달라지기 때문에 원활히 진행되지 않을 것이다. 그러므로 파이썬으로 파싱하는 소스코드를 '개인이 직접' 수정하여야 할 것이며, 그에 따른 법률적 책임은 수정자에게 있음을 기억하시길 바랍니다. 

*그럼에도 불구하고, 이 글이 대한성서공회의 권리를 침해한다는 신고가 들어올시 즉시 이 글을 삭제하도록 하겠습니다.

CPUU님의 창작활동을 응원하고 싶으세요?