728x90
우선 크롤링에 대해서 알아보자.
(아니 파싱은 뭐고 크롤링은 뭐고 스크랩핑은 뭐고..... 할 때마다 헷갈리는 개념들이 참..)
크롤링(Crawling)이란?
[ 크롤러 / Crawler ]
- 영어 사전 정의로써는 1. 기는 것 / 2. 파충류 / 와 같은 의미를 지닌다.
- 이는 우리가 웹 사이트를 열심히 돌아다니면서 데이터를 모을 것이다..! 라는 의미로 해석하면 될 것 같다.
- 즉, Web Crawler는 웹 페이지의 데이터를 모아주는 소프트웨어 라고 정의된다.
[ 크롤링 / Crawling ]
- 크롤러를 사용해 데이터를 추출해내는 행위 그 자체를 크롤링 이라 한다.
모듈(Module) 이란?
[ 모듈 / Moduel ]
- 사전적 정의로는 모듈이란 함수나 변수 클래스를 모아 놓은 파일이라고 할 수 있다.
- 쉽게 말하자면, 요리를 하기 위해서 후라이팬을 만들고 농사를 지어 재료를 준비하는 것이 아니라, 밀키트와 이미 만들어진 각종 요리 기구들을 이용하여 만든다고 생각하면 편하다.
- 즉, 안써도 상관은 없지만..! 이를 안쓰고 개발한다는 것은 진짜 뼈대부터 개발한다는 것이며, 상황에 따라선 비효율 적일순 있다.
(하지만.. 선비 개발자라면 만들어 보는것도 나쁘진 않을듯..?ㅎ)
크롤링을 하기 위해 사용한 모듈들
[ requests 모듈 ]
- requests 모듈 이란, 웹 페이지에서 HTTP 요청을 보내 원하는 HTML 정보를 가져오는 모듈이다.
- 즉, 웹 페이지로 부터 원하는 정보를 얻기 위해 요청을 보내면, 웹 페이지가 반환한 값을 가져오는 모듈이라고 생각하면 된다.
- 이러한 요청을 보내는 방식은 여러가지가 있는데, 주로 GET 방식과 POST 방식이 사용된다.
[ BeautifulSoup 모듈 ]
- BeautifulSoup 모듈 이란, HTML과 XML에서 데이터를 가져오기 위해 만들어진 Python 라이브러리이다.
- 주로 requests를 통해 받아온 값으로 부터 데이터를 추출하는 역할을 한다.
HTTP Method 의 관해서
[ REST / Representational State Transfer ]
- 자원(resource)의 표현(representation)에 의한 상태 전달 을 의미함.
- 자원(resource) : 이미지, 동영상, 사진과 같은 말 그대로의 데이터 자원을 의미함, 이러한 자원들은 고유한 ID 값을 지니고 있고 이러한 ID값은 HTTP URL에 명시되어 있음.
- 행위(Verb) : Client는 URL을 이용해 자원을 조작하기 위해 HTTP Method를 이용함.
- 표현(Representation) : Client가 서버로 요청을 보냈을 때 서버가 응답으로 보내주는 자원의 상태를 Representation 이라고 함. REST에서 하나의 자원은 JSON, XML 들의 여러가지 형태의 Representation으로 나타낼 수 있음.
- [ 참고 ] REST란 무엇일까?
- [ 참고 ] HTTP Method 란?
- [ 참고 ] GET, POST 방식을 가장 마음에 들게 설명한 곳
[ GET 방식 ]
- get 방식은 배에 물건을 실어 운반할 때 선반 위에 '보이도록' 하여 물건을 운반하는 방식이다.
- 어떤 웹페이지에서 로그인을 할 때 웹서버에 로그인 요청을 하기위한 정보가 URL을 통해 전달되는데, ID와 PW가 URL에 노출되어 전달되는 방식이다.
[ POST 방식]
- post방식은 배에 내부에 물건을 실어 운반하는 방식이다.
- 보안에 있어서 데이터를 노출하지 않고 서버와 통신이 가능한 방식이다.
API (Application Programming Interface)
[ API / Application Programming Interface ]
- Interface에 대한 사전적의미는 아래와 같다.
- 서로 다른 두 물체 사이에서 상호간 대화하는 방법을 의미한다.
- 예로 들어, 우리는 컴퓨터에 무언가를 입력하기 위해 마우스와 키보드 등을 이용하는데, 이 상황에서 컴퓨터와 사람을 이어주는 인터페이스(interface)가 바로 마우스와 키보드 이다.
- 또다른 예를 들자면, 내가 친구와 휴대폰으로 통화를 한다면, 휴대폰이 친구와 나를 이어주는 인터페이스가 되는 것이다.
- 즉, 사용자가 데이터랑 상호작용을 할 수 있게 해주는 프로그램이 API라고 얘기할 수 있을 것 같다.
- 그래서 다음과 같이 정리할 수 있다.
- API를 만든다, 라는 것은 사용자가 필요로 하는 기능을 만들어 서버에 올려놓고 특정한 규약에 따라 사용할 수 있게 하는 프로그램을 만드는 것이다.
- API를 사용한다, 라는 것은 누군가 만들어 둔 기능을 특정한 규약에 맞춰 사용한다는 것이다.
E-mail Protocols ( SMTP / IMAP / POP3) + SSL
[ SMTP / Simple Mail Transfer Protocol ]
- 이를 한국어로 간단히 번역하자면, 간단하게 / 메일을 / 보내기위한 / 통신규약 으로 나타낼 수 있을것 같다.
- SMTP 서버를 이용해 우리가 원하는 곳으로 메일을 보낼 수 있다.
- 주로 Client가 메일을 서버로 보내거나 서버간 메일을 주고 받을때 사용한다.
- 한국어를 지원하지 않기 때문에 MIME 형식으로 변환해 주어야 함.
(아니 근데 포트번호가 25 / 465 / 587 3가지나 있던데 아무거나 다 되는 건가..?)- SSL 위에서 사용하는 SMTP 포트번호는 465이며, 이는 Cisco 시스코 프로토콜과 충돌날 수 있다고 함.
[ IMAP / Internet Message Access Protocol]
- SMTP가 메일을 보내는 것이라고 한다면,
- IMAP는 메일을 받은 서버로부터 메일를 관리하고 메일을 꺼내서 가져오는데 사용되는 프로토콜 이라고 볼 수 있다.
- IMAP는 서버에 메일을 저장하고 여러 디바이스에 이메일을 동기화 한다.
[ POP3 / Post Office Protocol ]
- POP3는 IMAP과 마찬가지로 이메일을 받아오는 프로토콜이다.
- POP3는 서버로부터 메일을 가져오고 가져온 메일이 확인되면 서버로부터 메일을 삭제한다.
[ SSL / Secure Sockets Layer ]
- 사전적 정의로는 웹 사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술이다.
- 자세한 것은 여기서!
이번 활동을 하면서 다룬 API들
[ OpenWeatherMap ]
- 다양한 지역의 날씨 및 기상과 관련된 데이터를 가져올 수 있음.
import requests
import json
city = "Gumi"
language = "kr"
unit = "metric"
apikey = "API key가 들어갈 부분"
# python의 f-String을 통해 문자열 사이에 변수를 삽입 할 수 있음.
api = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={apikey}&lang={language}&units={unit}"
result = requests.get(api)
data = json.loads(result.text)
print(data["name"], "의 날씨입니다.")
print("날씨는 ", data["weather"][0]["description"], "입니다.")
print("현재 온도는 ", data["main"]["temp"], "입니다.")
print("하지만 체감 ", data["main"]["feels_like"], "일 거에요.")
print("최저 기온은 ", data["main"]["temp_min"], "입니다.")
print("최고 기온은 ", data["main"]["temp_max"], "입니다.")
print("습도는 ", data["main"]["humidity"], "입니다.")
print("기압은 ", data["main"]["pressure"], "입니다.")
print("풍향은 ", data["wind"]["deg"], "입니다.")
print("풍속은 ", data["wind"]["speed"], "입니다.")
[ Googletrans API ]
- 이름 그대로 구글의 번역기능을 수행할 수 있게 해주는 API이다.
- 공식 문서
from googletrans import Translator
translator = Translator()
while True:
sentence = input("번역하고 싶은 문장을 입력하세요(종료:q) : ")
result = translator.translate(sentence, dest="ja")
detect = translator.detect(sentence)
re_trans = translator.translate(result.text, dest="ko")
if(sentence == 'q'):
break
else:
print("\n============= 번역 결과 =============\n")
print(detect.lang, ":", result.origin)
print(result.dest, ":", result.text)
print("발음", ":", result.pronunciation)
print("재번역", ":", re_trans.text)
print("\n======================================\n")
[ Google IMAP API ]
- 구글의 메일전송 기능을 이용할 수 있게 해주는 API이다.
import smtplib
from email.message import EmailMessage
import imghdr
import re
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
def sendEmail(addr):
reg = "^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$"
if bool(re.match(reg, addr)):
smtp.send_message(message)
print("정상적으로 메일이 발송되었습니다.")
else:
print("유효한 이메일 주소가 아닙니다.")
message = EmailMessage()
message.set_content("코드라이언 수업중입니다.")
message["Subject"] = "TEST"
message["From"] = "## 발신자 메일주소 ##"
message["To"] = "## 수신자 메일주소 ##"
SMTP_SERVER = "smtp.gmail.com"
with open("./image.png", 'rb') as fp:
img_data = fp.read()
print(imghdr.what("./image.png", img_data))
# print(message._headers)
message.add_attachment(img_data, maintype='image',
subtype=imghdr.what("./image.png", img_data))
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
smtp.login("## 나의 메일 주소 ##", "## 비밀번호 ##")
sendEmail("## 나의 메일 주소 ##")
smtp.quit()
'활동 > 멋쟁이 사자처럼' 카테고리의 다른 글
다시 한 번 React (2) | 2022.06.01 |
---|---|
ERICA 멋사 10기 우아톤(우리끼리 아이디어톤) (2) | 2022.05.17 |
PM에 대해서 알아보자 / 빠른 정리 (0) | 2022.04.06 |
HTML/CSS/PYTHON을 배워야 하는 이유 (3) | 2022.03.31 |
멋쟁이 사자처럼 at 한양대학교 ERICA 10기 합격 (2) | 2022.03.15 |