반응형

@ 13. 이메일 주소 수집해서 엑셀로 저장하기

 

1. 이메일 주소 형식을 정규식을 사용해 읽어본다.

2. 중복된 주소는 제외한다.

3. 웹사이트에서 이메일 주소를 찾아 저장한다.

4. 엑셀로 저장한다.

 

 

* 정규식 (Regular Expression) 이란

- 특정한 규칙을 가진 문자열의 집합

- 문자열 검색과 치환 용도로 주로 쓰인다.

- 입력된 문자열을 쉽게 비교할 수 있지만 정규표현식을 익혀 둬야 한다. 

- 따라서 처음 코드를 본 사람은 익숙치 않을 수 있다. 


1.  이메일 형식 읽기

# 정규식 표현을 사용하기 위한 re
import re

# 다양한 형식의 이메일 리스트
test_string = '''
aaa@bbb.com
123@abc.co.kr
test@hello.kr
ok@ok.co.kr
ok@ok.co.kr
ok@ok.co.kr
no.co.kr
no.kr
tree@com
tree.com@hash.co.kr
'''

# 정규식 표현을 사용해서 test_string 안에서 
# [\w\.-]+@[\w\.-]+ : 글자와 .이 있고, 이게 몇개 있던지 있고, 
# @도 쓰고
results = re.findall(r'[\w\.-]+@[\w\.-]+', test_string)

# 정규식에 맞는 표현들만 출력
print(results)

결과

['aaa@bbb.com', '123@abc.co.kr', 'test@hello.kr', 'ok@ok.co.kr', 'ok@ok.co.kr', 'ok@ok.co.kr', 'tree@com', 'tree.com@hash.co.kr']

 


2. 중복된 이메일 삭제

# 결과를 set 현식으로 만들어서 중복을 없앤다.
# set은 중복없는 리스트다
results = list(set(results))

print(results)

결과

- ok@ok.co.kr 이 중복되었었는데 없어졌다.

['aaa@bbb.com', '123@abc.co.kr', 'test@hello.kr', 'ok@ok.co.kr', 'ok@ok.co.kr', 'ok@ok.co.kr', 'tree@com', 'tree.com@hash.co.kr']
['ok@ok.co.kr', 'aaa@bbb.com', 'tree@com', 'test@hello.kr', '123@abc.co.kr', 'tree.com@hash.co.kr']

 


3. 웹사이트에서 이메일 찾기

# 사이트에 접속하기 위한 모듈 requests
from wsgiref import headers
import requests
# 정규식 사용을 위한 모듈 re
import re

url = 'https://news.v.daum.net/v/20220411194301017'

# 헤더가 어떤 역할을 해 주는지 잘 모르겠다.
headers = {
        'User-Agent' : 'Mozilla/5.0',
        'Content-Type' : 'text/html; charset=utf-8'
        }

# 사이트에 접속해서 데이터 가져오는 부분을 아직 잘 모르겠다
response = requests.get(url, headers=headers)

# 이메일 형식의 텍스트 찾아서 중복제거 후 출력
results = re.findall(r'[\w\.-]+@[\w\.-]+', response.text)
results = list(set(results))

print(results)

결과

사이트 내용 중 이메일 확인

 

사이트 내에서 확인된 newsinfo@hankyung.com 과

객원기자의 것으로 보이는 이메일이 확인됨(일부러 *표시).

['newsinfo@hankyung.com', 'boba****@hanmail.net']

4. 엑셀로 저장

import requests
import re
from openpyxl import load_workbook
from openpyxl import Workbook


url = 'https://news.v.daum.net/v/20220411194301017'

headers = {
        'User-Agent' : 'Mozilla/5.0',
        'Content-Type' : 'text/html; charset=utf-8'
        }
response = requests.get(url, headers=headers)
results = re.findall(r'[\w\.-]+@[\w\.-]+', response.text)
results = list(set(results))

print(results)

# 파일 열기
try:
        wb = load_workbook(r'기초프로그램\13_emailcollector\email.xlsx', data_only = True)
        sheet = wb.active
except:
        wb = Workbook()
        sheet = wb.active
        
for result in results:
        sheet.append([result])
        
# 저장하기        
wb.save(r'기초프로그램\13_emailcollector\email.xlsx')

결과

- 엑셀로 저장됨


하드웨어 제어를 위한 코딩을 주로 한 입장에서 파이썬의 다양한 기능들은 낯설다.

이메일을 수집할 일도, 서버를 만들 일도 없었으니까.

새로운 도전같은 기분이네 ㅎㅎ

 

자세한 내용(돌아가는 원리 등)을 잘 모르다보니

답답한 부분도 있다.

이건 좀 자세히 들여다 보는 시간을 갖자.

 

 

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기