[Python] 크롤링 프로그램 및 API 관련 개념 정리

2022. 5. 3. 16:34·활동/멋쟁이 사자처럼
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 시스코 프로토콜과 충돌날 수 있다고 함.

https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D

[ IMAP / Internet Message Access  Protocol]

  • SMTP가 메일을 보내는 것이라고 한다면,
  • IMAP는 메일을 받은 서버로부터 메일를 관리하고 메일을 꺼내서 가져오는데 사용되는 프로토콜 이라고 볼 수 있다.
  • IMAP는 서버에 메일을 저장하고 여러 디바이스에 이메일을 동기화 한다.

[ POP3 / Post Office Protocol ]

  • POP3는 IMAP과 마찬가지로 이메일을 받아오는 프로토콜이다.
  • POP3는 서버로부터 메일을 가져오고 가져온 메일이 확인되면 서버로부터 메일을 삭제한다.

 

  • [ 참고 ] SMTP, POP3, IMAP 차이

[ 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"], "입니다.")

 

OpenWeatherMap 출력 결과

[ 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")

Googletrans 출력 결과 / 술이.. 맛있는 음료..? ㅋㅋㅋㅋ

[ 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()

Google IMAP API 실행 결과

저작자표시 (새창열림)

'활동 > 멋쟁이 사자처럼' 카테고리의 다른 글

다시 한 번 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
'활동/멋쟁이 사자처럼' 카테고리의 다른 글
  • 다시 한 번 React
  • ERICA 멋사 10기 우아톤(우리끼리 아이디어톤)
  • PM에 대해서 알아보자 / 빠른 정리
  • HTML/CSS/PYTHON을 배워야 하는 이유
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    우테코
    한양대학교
    개념
    Erica
    HTML5
    Javascript
    백준
    대학
    알고리즘
    타입스크립트
    3기
    독후감
    TypeScript
    디자인
    ES6
    에리카
    프로그래밍
    개발
    tutorial
    군대
    개발자
    독서
    1주에 1권씩
    프로젝트
    프론트엔드
    HTML
    canvas
    react
    CSS
    1주 1권
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
[Python] 크롤링 프로그램 및 API 관련 개념 정리
상단으로

티스토리툴바