반응형
@ 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')
결과
- 엑셀로 저장됨
하드웨어 제어를 위한 코딩을 주로 한 입장에서 파이썬의 다양한 기능들은 낯설다.
이메일을 수집할 일도, 서버를 만들 일도 없었으니까.
새로운 도전같은 기분이네 ㅎㅎ
자세한 내용(돌아가는 원리 등)을 잘 모르다보니
답답한 부분도 있다.
이건 좀 자세히 들여다 보는 시간을 갖자.
반응형
최근댓글