이번에는 두번에 걸쳐 다룬 정규식을 이용해서 메일주소를 추출하는 프로그램을 만들어 보도록 하겠습니다. 이걸 응용하 면 웹사이트에 나와 있는 사업자 번호라든지, 전화번호등 여러가지 정보를 추출하는 것으로도 확장을 할 수 있습니다. 노파심에서 언급 드리자면 여기에서 다루는 메일주소를 추출하는 방법을 배우셔서 테스트까지 하시는 것은 문제가 없지만 이걸 이용해서 실제로 웹사이트의 메일주소를 수집해서 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 |