멋사 ai스쿨 TIL - (3)

eve·2022년 9월 16일
0

likeLion

목록 보기
3/45

-- 사담영역 --


으앗 .. 다음 실시간 검색어 8월부터 사라졌는데 (15년만)
커리큘럼이 수정되지 않는 대참사 ㅎㅎ
beautiful soup는 '파이썬으로 웹크롤러 만들기' (라이언 미첼) 책에서 접해본 적 있었는데
여기서 만나니 참 반갑다!
문과 감성으로는 .. 아름다운 수프가 이상한 나라의 앨리스에서 나왔다는 것만으로도 흥미로웠다
저자분도 꽤나 잘 알려주셨지만 .. 나 그때 이걸 왜 해야하나 싶어서 깊게는 못 배웠다.
역시 동기가 중요해 동기~ 동기사랑 나라사랑

-- 사담 끝 --

1.함수와 모듈

1. 함수

블럭을 조립하여 나무를 만들고 싶은데 너무 많이 하면 손이 아파 .. 나무 조립기를 사는 게 낫다

내가 하나하나 할 수 없는 것을 대신해주는 것 = 함수

주의사항: 여기에서 뭘 조립할 지 주지 않으면 에러가 난다!

construct_machine(brownblock,greenblock)

위와같이 내용물을 넣어주면 출력한다.
이제 나는 자동차도, 집도, 공장도 모두 마트에서 파는 조립기(=함수)로 대량생산할 수 있다!


2. 모듈

헉, 그런데 그 모든 조립기들을 묶어서 파는 '마을 만들기 키트'가 있다!
이렇게 되면 내가 필요한 조립기들을 일일이 마트 진열장에서 찾아나설 필요가 없잖아!?
(코딩에서도 본성대로 게을러진 건에 대하여 .. 우리는 변명할 여지가 없다.)

그 패키지가 ~ 바로 모듈이라는 말씀이지 뭐~~


2. 자동차야 안녕

1.순서
(1) request 모듈아
(2) get 함수를 꺼내줘
(3) 요청을 보내줘
= 자, 여기 응답값~

2.get(url)

import requests

url = "http://www.daum.net"
response = requests.get(url)

print(response.text)

reponse로 html 링크가 출력됨.


3. 요약하자면

모듈을 불러오고, response 변수에 값을 저장하고, url을 불러와서 텍스트화. (parsing도 가능)

3. Beautiful soup

  1. parsing
변수명(데이터, 가공방법)
  1. 페이지의 타이틀 가져오기
soup = BeautifulSoup(response.text, 'html.parser')

print(soup.title)

html title tag 말하는 것이다.

  1. html 파일 생성
file = open("daum.html","w")
file.write(response.text)
file.close()

'daum.html'이라는 텍스트파일이 동일 디렉토리 내 생성.
얻어온 문자형 자료 및 링크가 저장됨.

4. 얻어오고 정리하기

  1. a 태그를 통해 각 검색어의 링크를 얻어옴
  1. link_favorite이라는 공통의 클래스명
  1. 불러온 페이지의 데이터 중 a 태그만 얻기
print(soup.findAll("a"))

말하자면, 출력을 하는데 변수명과 몽땅 찾으라는 구체성과 태그명 모두 필요!
결과적으로는 a태그 + 그 안에 묶여있는 태그들을 불러오게 된다.

a태그에 덧붙여서 ("a","변수명")을 입력하면, 더 상세한 내용의 데이터를 얻는다.

  1. 태그정보를 제외하고 텍스트 정보만 얻어오기
for result in results:
    print(result.get_text(),"\n")

\n 을 큰 따옴표로 문자열 취급해서 사용하는 줄 몰랐다 .. 출력함수 사용 시 참고할 것!

5. 라벨링하기

  1. 순위 붙이기
url = "http://www.daum.net/"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
rank = 1

results = soup.findAll('a','link_favorsch')

for result in results:
    print(rank,"위 : ",result.get_text(),"\n")
    rank += 1

rank 변수를 만들고, 시작값을 정해준다. 출력 시 변수명을 불러와서 포함시켜준다.
순위에 1씩 더하는 계산식을 그 후에 언급해준다. 그게 맞는진 모르겠지만 말이다.

  1. 날짜 붙이기
print(datetime.today())

datetime이라는 모듈을 import하는 것을 잊지 말것!
내정된 'today'함수를 활용해서 데이터를 출력한 오늘 날짜를 얻자.

6. 파일로 출력하기

1. 파일 열기

open(파일명.확장자, 모드)

2. 모드에 따라
모드란, 파일의 상태를 의미한다.

r: read. 읽기전용 모드
w: write. 편집모드 (모두 지울 수 있으니 유의)
a: append. 기존 파일에 새로운 내용 덧붙이기. (기존버전 유지)

7. 크롤링 금지

어떻게 하면 크롤링봇을 막는 네이버의 방어막을 뚫지!?
우리가 봇이 아니라는 것을 headers라는 변수로 증명한다.
아래는 예시정보 포함.

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

이렇게 적어주기만 할 것이 아니라,
request변수에 넣어서 url 요구 시 우리의 신원(=사용환경)을 증명해준다.

response = requests.get(url,headers=headers)

순서 요약
: 신분증명 (headers)> 정보 요청 (request) > 정보 정제 (bs) > find (정보 특정) > 반복문을 돌며 반복! 아이 재밌다

8. API

9. python의 json 모듈

1. Dictionary 자료형을 사용한다

10. translator.detect(sentence)

1. 언어 종류를 감지

translate(text,dest,src)

각각 텍스트, 번역될 언어 (destination), 재료

11. smtp

1. simple mailing transfer protocol
포트를 필요로 함.

import smtplib

SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465

smtp = smptlib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)

위는 서버에 연결해주는 함수임.

2. 로그인

smtp.login("이메일계정@gmail.com","패스워드")

3. 메일 보내기

smtp.send_message()
smtp.quit()

4. MIME

.email.message 모듈


12. 메일에 사진 첨부

1. rb, wb, ab
binary 파일 (read binary, write binary, append binary)은 사람이 이해하기에는 어려움. 기계가 이해하는 방식 (이진법)

image = open ("###.png","rb")
prnt (image.read())

이런 식으로 작성하여 바이너리 파일을 출력할 수 있음.

2. add_attachment
텍스트 외에 다른 파일들을 첨부할 때 활용함.


13. 유효성 검증

1. 중괄호로 문자의 범위를 특정하여 유효성 검사

^[a-zA-AZ0-9.+-_-]+

앞의 내용들 중, 알파벳과 숫자들의 내용을 검사.

2. back-slash
period가 정규 표현식으로 이해되지 않도록 추가
정규표현식의 마무리는 '$'를 넣어서 마무리한다.

reg = "^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$"
profile
유저가 왜 그랬을까

0개의 댓글