IT/멋쟁이사자처럼 AI SCHOOL

멋쟁이사자처럼 AI SCHOOL 3일차 복습 - [심화]같이푸는 파이썬🦎

카멜필름 2022. 3. 17. 01:57

블로그 개설한지 하루밖에 안 됐는데 벌써 방문자가 200명을 넘었다..ㅋㅋㅋㅋ

AI SCHOOL 디스코드에만 홍보했는데 방문자 전부 같은 동기들인가?? 아니라면 다들 어떻게 알고 찾아왔는지 궁금하다.

 

오늘 강의는 세부 프로젝트가 많았다.

1. 실시간 검색어 확인하기

2. 날씨 정보 받아오기

3. 번역하기

4. 메일 보내기

 

이 많은 내용을 오늘 하루만에 다 배웠다 ㅋㅋ

실시간 검색어는 지금 남아있는 곳이 줌이랑 네이트뿐이라 강의 수정이 필요해보인다.

네이버 실검 사라진지 벌써 꽤 됐다..

 

강의 다 끝나니 밤 11시 6분이었다!

시간이 이렇게 오래 걸린 이유는

오늘 갑자기 아침 6시에 눈 떠짐 -> 낮에 피곤함 -> 오후에 머리 깨질듯이 아픔 -> 약 먹고 쉬엄쉬엄하면서 들음 -> 오래걸림ㅠㅠ

시간이 늦어 그냥 자고싶었으나 오늘 배운 내용도 많고 내일 되면 까먹을 것 같아서 블로그 포스팅하면서라도 복습하려고 한다.



1. 실시간 검색어 확인하기

 

크롤링은 예전에 멋쟁이사자처럼 동아리에서 부원들한테 데이터분석 멘토링을 해주기 위해 인프런 강의를 들으며 배운 적이 있다. 그때뿐이고 딱히 크롤링 할 일이 없어서 다시 새롭게 배우는 것이나 마찬가지였다. 일단 강의 좋은 점과 아쉬운 점을 적고 복습을 시작하려고 한다.

 

<강의 좋은 점>

원리부터 차근차근 설명해줘서 이해하는데 큰 어려움이 없었다.

 

<아쉬운 점>

크롤링 배울 때 user-agent 값 알아내는 방법을 설명해주지 않았다. 나도 까먹어서 다시 인프런 강의를 참고해서 알아냈다. user-agent 값을 알아내려면 구글에 'my user agent'라고 검색하며 나온다.

 


1. 데이터 크롤링

-크롤러: 기는 것, 파충류

=>기어다니면서 데이터를 모아주는 애

Web Crawler: 웹 페이지의 데이터를 모아줌

Web Crawling: 크롤러를 사용해 웹페이지의 데이터를 추출해내는 행위

 

2. 모듈

(모듈을 블록만들기 키트에 비유한 점이 마음에 들었다.)

 

3. 요청 보내기

서버에 요청 보내기: requests.get(url)

모듈명.함수이름

get: 요청을 보내는 기능

client가 요청 보내면 server에서 응답해줌

200나오면 성공

 

4. type

resoponse.text와 BeautifulSoup(response.text, 'html.parser')는 같은 결과가 나오지만 다른 것!

BeautifulSoup: 원래 문자열인 response.text를 다른 타입으로 변환, 통에다 정보 담아주는 기능, 통에 다양한 칸막이 있다고 생각, 문자열 덩어리 다 떼어 BS통에 잘 정리해줌

 

5. BeautifulSoup(데이터, 파싱방법)

데이터: html, xml 등

request 이용해서 html 가져옴

parsing: 우리의 문서 데이터를 의미있게 변경

html.parser 이용할 것

BeautifulSoup(response.text, 'html.parser')

 

(soup.title)  -><title>Daum</title>

(soup.title.string)  ->Daum

 

6. 파일 불러오기: open()이용

file = open("Xxx.html, "모드")

불러오고 싶은 정보 태그간의 공통점 찾기

 

7. 해당 태그의 모든 내용을 불러오고 싶으면 findAll사용

print(soup.findAll("a", "클래스이름"))

 

8. 현재 날짜 표시

-모듈 불러오기

from datetime import datetime

-오늘 날짜 불러오기

print(datetime.today())

 

9. 파일 모드

r: read

w: write

a: append (최근 내용에 덮어씌움)

 

 

 



2. 날씨 정보 받아오기

 

API 사용방법 책에서 보고 따라했다가 어려워서 포기했던 적이 있다. 다행히 강의에서 이해하기 쉽게 설명해줘서 잘 따라갈 수 있었다. 쌩 노베상태였으면 오늘 수업 따라가기 힘들었을 것 같다.


1. API 정의

A(Application): 응용 프로그램

P(Programming): 프로그래밍

I(Interface): 인터페이스

 

프로그램과 프로그램을 이어주는 연결고리 (Client-Server)

Client가 Server 데이터를 원활하게 주고받기 위해선 API가 필요

 

API를 만든다-> 누군가 프로그램을 만들면 APi를 이용해 가져오면 된다. 사용자가 필요한 기능을 만들고 서버에 올려 특정 규약에 따라 사용할수 있게 함.

 

2. api = f"http://~~~~{city}&id={key}"

문자열 안에 변수 쓰려면 앞에 f붙이고 {}중괄호 쓰기

 

3. api에 담긴 서버주소를 보면 ?가 있음

? 뒤 정보들은 api에 필요한 정보를 나타냄

 

4. api링크 넘겨주기

result = requests.get(api)

우리가 원하는 결과를 얻으려면

print(result.text)

 

5. 예쁘게 출력하는 법: json 사용

json: 자바스크립트 object notation

데이터를 주고받을 때 사용하는 포맷

딕셔너리랑 비슷하게 생김

 

6. 오늘 날씨 출력

구조에 맞게 쓰면 됨

print("날씨는", data["weather"][0]["main"], "입니다.")

 

7. 파라미터는 &기호로 이어짐

 



3. 번역하기

구글 번역기 이용해서 번역하는건데 파이썬으로 해보는 건 처음이다!

예전에 배웠다면 "그냥 구글 번역기 사이트 가서 하면 되지 뭐하러 귀찮게 파이썬으로 하지?" 이런 생각을 분명히 했을텐데 이제 그런 생각이 아예 들지 않는다 ㅋㅋㅋ


1. Library

: 모듈을 큰 단위로 묶은 것

 

2. 언어 감지

: '안녕하셈'=한국어 'hello'=영어, 무슨 언어인지 파악하는 것

 

3. 구글 번역기 불러오기

from googletrans import Translator

 

4. Translator()

: 구현돼있는 번역 기능을 사용할 수 있음

 

5. 언어감지 코드

translator=Translator()

sentnece="안뇽"

detected=translator.detect(sentece)

 

6. confidence

신뢰도

 

7. 번역

translate(번역 원하는 문장, dest, src)

-dest: destination 어떤 언어로 번역할지

-src: source 언어감지 기능을 탑재했기 때문에 생략 가능, 원래 문장 언어

 



4. 메일보내기

파이썬으로 메일보내는건데 진짜로 메일이 온다!!

메일함 들어가보니까 연습용 메일이 두 개나 와있었다ㅋㅋ

근데 이거 실습할 때 구글 아이디랑 비밀번호를 코드에 적어야 작동하기 때문에 비밀번호 바꾸고 진행했다.

사전에 보안해제하고 설정해야 할 것들이 있다.


1. IMAP 사용설정

다양한 기기에서 이메일에 접근하기 위해 설정해야한다.

 

2. SMTP

Simple 간단하게

Mail 메일을

Transfer 보내기 위한

Promise 약속

 

-IMAP: 서버가 우리에게 전송된 메일을 보내줌

-SMTP: 우리가 서버에게 전송할 메일을 보내줌, 서버가 다른 서버로 전송할 메일을 보내줌

SMTP를 이용해서 우리가 원하는 곳으로 메일을 보낼 수 있다.

SMTP도 주소 가짐

(address, port)

 

3. 메일 보내는 과정

SMTP 메일 서버 연결 -> 로그인 -> 메일 보내기

 

4. smtplib 사용

import smtplib

SMTP_SERVER = "smtp.gamil.com"

smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)

여기서 SSL을 쓰는 이유: gmail은 SSL을 필수로 요구하기 때문

 

5. 로그인하기

smtp.login("이메일", "비번")

 

6. SMTP 메일 서버로 메일 보내기

smtp.send_message(내용)

smtp.quit()

 

7. MIME

: 전자 우편을 위한 인터넷 포맷

SMTP는 영어를 제외한 것들은 지원하지 않는다.

무조건 MIME 형태로 변경해서 서버에 보내야 알아듣는다.

 

8. email.message 모듈 사용

-내용 작성

from email.message import EmailMessage

message = EmailMessage()

message.get_content("내용")

 

9. Header

서버야 우리 이런 형태 메일을 보낼것에 대비해

-제목, 발신자, 수신자

message["subject"]="제목"

message["From"]="발신자 이메일 주소"

message["To"]="수신자 이메일 주소"

 

<의문점>

이 내용들이 Header에 들어가서 []이런 형태로 쓰고

본문은 content에 들어가서 message.get_content()

이런 형태로 쓴다는데 이 부분이 잘 이해가 안된다.

Header랑 Content랑 무슨 차이길래..? 내일 질문게시판에 올려봐야겠다.

 

 

10. smtp.send_message(MIME형태 내용)

 

11. 이미지 전송

rb: readbinary

wb: writebinary

ad: appendbinary

binary=이미지 정보를 컴퓨터가 읽을 수 있게 변환한 것

 

12. close함수 없이 안전하게 파일 열고 닫는 법

with open("사진.png", "rb" as image:

    image_file = image.read()

 

13. add_attachment

: text가 아닌 다른 포맷들 첨부

image, maintype, subtype

message.add_attachment(image_file, maintype="유형", subtype="확장자")

 

14. 이미지 확장자 판단

import imghdr

image_type=imghdr.what('파일명', 실제파일데이터)

 

15. 유효성 검사하기

우리가 보내고자 하는 이메일이 진짜인지 확인할 필요가 있음

if bool 사용해 메일 유효하면 보내는 식으로 코드를 짜야함

 

16. 정규표현식

-시작: ^

-끝: $

-[]+: []안에 내용들 1회 이상 반복되는지

-a-z: 소문자 a~z까지

-A-Z: 대문자 A~Z까지

-0-9: 숫자 0~9까지

-+,_,-: 기호들 들어갔는지

-{2,3}: 최소 2회 최대 3번 반복

-\.: 문자열.이 뒤에 온다

정규표현식 불러오는 모듈: import re