본문 바로가기
Python

파이썬 메일주소 추출하기

by eloyb 2024. 12. 26.
반응형

이번에는 두번에 걸쳐 다룬 정규식을 이용해서 메일주소를 추출하는 프로그램을 만들어 보도록 하겠습니다. 이걸 응용하 면 웹사이트에 나와 있는 사업자 번호라든지, 전화번호등 여러가지 정보를 추출하는 것으로도 확장을 할 수 있습니다. 노파심에서 언급 드리자면 여기에서 다루는 메일주소를 추출하는 방법을 배우셔서 테스트까지 하시는 것은 문제가 없지만 이걸 이용해서 실제로 웹사이트의 메일주소를 수집해서 db에 저장하거나, 상업적으로 이용하면 1천만원 이하의 벌금에 처해질 수 있으니 악용해서 사용하시면 안된다는 점을 언급드리겠습니다. (정보통신망법 위반)

이 프로그램의 작동 방식은 웹페이지나 워드문서, 엑셀 파일 등에서 메일주소가 포함된 문서를 클립보드에 복사한 다음, 클립보드에 있는 메일주소만 출력하게 해주는 방법을 사용하게 됩니다. 파이썬에서 클립보드를 이용하려면 클립보드를 사용할 있도록 해주는 라이브러리가 필요합니다. 라이브러리는 pyperclip 이라는 라이브러리이며 pyperclip 모듈에 는 컴퓨터의 클립보드에서 텍스트를 보내고 받을 수 있는 copy() paste() 함수가 있습니다.

파이썬에서 외부 라이브러리를 설치하려면 pip 이용해서 설치할 있습니다. pip 파이썬 최신 버전을 설치했다면 기 본적으로 설치되어 있으므로 명령프롬프트에서 쉽게 외부 라이브러리를 설치할 수 있습니다.

 

폴더의 내용을 보면 위처럼 pip.exe 파일이 들어있는 것을 확인할 있습니다. 시작 - 프로그램및 파일 검색창에서 cmd를 실행시켜 명령 프롬프트를 엽니다.

 

파이썬의 외부 라이브러리를 설치하려면 위와 같이 명령프롬프트에서 pip install 라이브러리명 입력하면 됩니다. 그러 면 pip가 웹사이트에서 해당 라이브러리를 찾아서 설치를 해주게 됩니다.

 

 

pyperclip 라이브러리를 설치하려면 위와 같이 pip install pyperclip 을 입력하면 됩니다. 필자의 경우는 이미 설치되어 있다고 메시지가 나오지만 처음 설치한다면 메시지는 Downloading... 어쩌구 하면서 설치 메시지가 나오게 것입니다. pyperclip 라이브러리를 설치했다면 실제로 제대로 동작하는 지 테스트를 해봐야 겠죠.

쉘모드에서 아래와 같이 입력을 해봅니다.

>>> import pyperclip >>> pyperclip.copy('안녕하세요.') >>> pyperclip.paste() '안녕하세요.' >>>

위와 같은 명령어가 이상 없이 입력되고 출력된다면 pyperclip 제대로 설치된 것을 의미합니다. 이제 import 이용해 서 pyperclip을 어떤 곳에서도 사용할 수 있게 되었습니다.

 

#! python3 import pyperclip, re # 이메일 정규식 만들기 emailReg = re.compile(r'([a-zA-Z0-9._%+-]+@[a-zA- Z0-9.-]+(\.[a-zA-Z]{2,4}))') # 클립보드 텍스트에서 모든 일치 항목들을 찾기 text = str(pyperclip.paste()) matches

= [] for groups in emailReg.findall(text): matches.append(groups[0]) # 결과를 클립보드에 복사한다. if len(matches) > 0: pyperclip.copy('\n'.join(matches)) print('\n'.join(matches)) else: print('추출할 메일주소가 없습니다.')

 

메일주소 추출 프로그램의 전체 소스는 위와 같습니다.

 

프로그램을 테스트 하려면 위의 전체 내용을 Copy 다음에 F5키를 눌러서 프로그램을 실행 시킵니다. aaa@naver.com bbb@daum.net ccc@nate.com ddd@yahoo.com eee@microsoft.com >>>

그러면 위와 같은 출력 결과를 확인할 수 있습니다. 그러면 코드에 대해 하나씩 설명하도록 하겠습니다.

 

 

 

 

1.  #! python3 파이썬이 이 프로그램을 실행하게 하겠다는 선언을 해주는 부분입니다. 이렇게 선언을 하면 쉘모드나 편 집기모드를 사용하지 않고도 프로그램을 실행시킬 수 있습니다.

2.  라이브러리인 pyperclip 모듈과 re 모듈을 불러와서 클립보드의 사용과 정규식을 사용할 수 있도록 해줍니다.

3.  메일주소의 정규식입니다. [a-zA-Z0-9._%+-] 메일주소에서 사용자 이름에 해당하는 형식이 이와 같은 것을 사용할 수 있다고 정규식으로 지정해 주었습니다. 사용자이름은 소문자, 대문자, 숫자, 점, 밑줄, 백분율, 더하기, 하이픈 중 하나 를 쓸 수 있다는 뜻입니다. 그 다음에 @를 추가하고 도메인 이름의 규칙을 [a-zA-Z0-9.-] 로 지정합니다. 도메인명에는 문 자, 숫자, 마침표, 하이픈만 허용되는 약간 제한적인 규칙이 있습니다. 마지막으로 점(.) 뒤에 탑레벨의 주소(com, biz)의 형식을 정규식으로 지정해 줍니다. \.[a-zA-Z]{2,4} 탑레벨의 마지막 이름은 2,3,4자의 길이만 허용하고 알파벳 소문자, 대문자만 사용할 수 있다고 정규식을 지정해 줍니다.

4.  text 변수에 클립보드에 있는 모든 텍스트를 저장합니다.

5.  matches = [] matches 라는 목록 변수에 일치하는 항목을 저장합니다.

6.  for 반복문을 돌면서 메일주소와 형식이 일치하는 항목을 groups[0] 에 추가해 줍니다.

7.  메일주소 형식과 일치하는 항목이 있다면 pyperclip.copy 를 이용해서 메일주소를 가져옵니다. join 메서드는 구분자 (\n) 형식으로 문자열들을 결합합니다. \n 구분자는 개행문자이므로 행씩 메일주소를 구분해서 출력해 주게 니다.

마지막으로 일치하는 메일주소가 없을 경우 '추출할 메일주소가 없습니다.'를 출력하고 프로그램을 종료합니다.

 

 

 

 

'Python' 카테고리의 다른 글

파이썬 파일 읽기와 쓰기  (3) 2024.12.26
파이썬 정규식 02  (2) 2024.12.21
파이썬 정규식 01  (3) 2024.12.21
파이썬 문자열 다루기  (5) 2024.12.21
파이썬(Python) 딕셔너리  (3) 2024.11.30