본문 바로가기

Programming/Python Tutorials

[PYTHON 3] Tutorials 32. Make words counters - 1 ( words counter 만들기)


이번 시간에는 'words counter'를 만들어 보겠습니다. 말 그대로 얼마나 많은 단어들이 있는지 카운팅 하는 프로그램입니다. 일반적으로 'words counter'는 문서 작업을 할 때에 얼마나 많은 글자가 사용되어는지 확인하는 용도로 많이 활용되곤 합니다. 대신 이번에는 특정 웹 페이지에서 어떤 단어가 얼마나 많이(빈도수) 사용되어졌는지를 알아보는 프로그램을 만들어보겠습니다. 이는 빅데이터, search engine(검색엔진) 분야 등 다양한 분야에 광범위하게 사용이 되는 개념이기도 합니다. 

시작을 하겠습니다.

우선 코딩에 필요한 모듈들을 import 하겠습니다. 이번에는 웹페이지 관련 모듈인 requests, HTML 코드를 예쁘게(?), 단정하게 보여주는 BeautifulSoup, 카운팅 관련해서 처리할 operator 모듈을 불러들입니다.

함수를 하나 정의하는데, 받아들일 인자는 웹페이지의 URL 값입니다.

웹페이지에서 단어들을 추출해서 저장을 할 list 타입을 정의해 줍니다. 여기에 단어들이 차곡차곡 쌓이게 될 예정입니다.

예전에 웹 크롤러 만들기 편에서 다룬 부분과 동일한 코드입니다. 웹페이지의 URL 값을 얻어서 해당 웹페이지를 불러들이고, 거기의 소스코드를 텍스트화 시킨 후에 변수 source_code에 저장을 합니다.

상기 코드를 즉각적으로 확인할 수 있도록 별도의 'terminal'에서 해당 코드를 넣어 보겠습니다.

위의 그림에서 source_code 에 저장된 값을 표기하면 아래 그림과 같이 혼란스럽게 나열이 됩니다.

그래서 가독성 향상을 위해서 BeautifulSoup을 사용을 해줍니다.

상기와 동일한 코드를 넣어주어 확인을 해 보려고 합니다.

BeautifulSoup 을 적용하니 아래와 같이 가지런하게 정렬된 html 코드를 보여줍니다. 훨씬 가독성이 좋아졌습니다.

이번에는 웹페이지에서 타이틀(제목)만 추려서 단어들을 추출해 보겠습니다. 물론 본문 내용을 시도 하여도 상관없지만, 조금이나마 단순하게 해 보려고 타이틀만 해 보도록 하겠습니다. 제목에 해당하는 html 코드를 확인하게 위해 아래와 같이 developer mode 로 확인을 하고 있습니다. 여기에서 title에 해당하는 부분은 <p class="tt-post-title"> 아래에 있는 a 태그로 감싸여져 있는 <a href=......>..........</a> 부분입니다.

위의 a 태그 부분을 찾기에 앞서 a 태그를 감싸고 있는 p 태그를 찾아주겠습니다. 아래와 같이 코드를 넣어 p 태그를 전부 찾았습니다.

찾은 p_tag 에 들어 있는 값을 확인해 보겠습니다.

p_tag 값이 잘 나오고 있네요. 그럼 이제 이 p_tag 안에 있는 a 태그에서 제목에 해당하는 부분만 추출해 보겠습니다. 이를 위해 반복문인 for 를 사용하겠습니다.

p_tag 안에 있는 각각을 title_text 로 임의로 명명하고 그것의 text 값만을 뽑아 content 변수에 넣어줍니다.

이렇게 찾은 content를 lower()를 사용하여 소문자화 시켜 줍니다. 왜냐하면 알파벳의 대문자와 소문자를 따로 구분짓지 않고 동일한 것으로 간주하기 위함입니다. 그런 후에 스페이스(공백)을 전후로 분리시켜 줍니다. 즉, 하나의 문장에는 공백으로 단어와 단어가 나누어짐으로 이를 split() 으로 나누어 주는 것입니다. 이렇게 공백을 전후해서 나누어진 값들이 단어가 되는데 이를 words 변수에 넣어 주겠습니다.

다시 한번 더 반복문을 사용하는데, words 안에 있는 단어들을 하나씩 each_word로 명명합니다.

제대로 각각의 단어가 들어왔는지 확인하는 print() 를 사용합니다. 

단어의 확인이 이루어 졌다면 각각의 단어를 초기에 선언한 word_list 에 첨가해 줍니다.

여기까지의 과정을 'Terminal'에서 구현하면 아래와 같습니다.

이제 이렇게 해서 정의한 함수 start(url)을 호출하여 전체를 실행시켜 보겠습니다.

아래 그림처럼 제목에 있는 단어들이 나열이 됩니다. 

또 다른 단어들을 확인해 보겠습니다.

'Terminal'에서 같은 과정으로 확인을 해보겠습니다. 아래와 같이 단어들만 나열이 되고 있습니다.

마지막으로 word_list에는 어떤 단어들이 저장되어 있는지 확인해 보겠습니다.

지금까지 웹페이지에서 제목에 해당하는 부분만을 파이썬을 이용해서 크롤링 한 후, 각각의 단어들만 추출하는 과정을 진행해 보았습니다. 그러나 상기에 있는 단어들은 미완성이라고 할 수 있습니다. 왜냐하면 몇몇 특정 특수문자 같은것도 포함이 되어 있기에 이를 처리하는 부분은 다음 시간에 알아 보도록 하겠습니다. 수고하셨습니다.