220512

HyeonKi Jo·2022년 5월 12일
0
post-thumbnail

2. 컴퓨터의 외부 및 내부 IP확인

main2

  • 공인 IP주소가 출력된다.

request 패키지

Request

  • r = requests.get('https://api.github.com/user', auth=('user', 'pass')) : url주소로 들어가서 크롤링해온다.
  • r.status_code : 200, 읽어온 r의 상태 코드를 출력 (200 : 정상, 404 : URL주소 찾을 수 없음 등)
  • r.headers['content-type'] : r.의 content-type의 헤더를 읽어옴 'application/json; charset=utf8'
  • r.encoding : r의 인코딩 방식 확인, 'utf-8'
  • r.text : r이 가지고있는 text 확인'{"type":"User"...'
  • r.json() : r의 Json 확인 {'private_gists': 419, 'total_private_repos': 77, ...}

TCP / IP

Transmission Control Protocol (TCP)

  • 세방향 HandShaking (Three-way Handshaking)
  • 클라이언트에서 보낼 떄, 데이터 통신 전, 서버 -> 클라이언트, 클라이언트 -> 서버, 서버 -> 클라이언트 이렇게 3번 통신을 통해 송수신 확인을 한다.
  • 이를 이용한 공격이 DoS(Denial of Service)공격이다.

UDP (No HandShaking)

  • 통신하며 잘 받았는지 확인하지 않음

Internet Protocol(IP)

패키지

  • __init__.py가 존재하는 폴더를 만들어서 기능들을 만들어 넣으면 된다.
  • 아래 Lib-> site-package -> Request에서 보면__init__.py를 찾을 수 있다.
  • 또, 모듈이 아니라 패키지지만, __init__.py에서 from .api import request, get, head, post, patch, put 등 현재폴더에서 app (.api)에서 모듈들을 임포드해서 사용하기 때문에, 패키지를 모듈처럼 사용할 수 있다.

정규 표현식

`^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-]+$'

  • 뭔소리인지 하나도 모르겠다.
  • 위 식은 이메일 주소를 표현하는 표현식이다.
  • abc1234@example.com
  • ^ : ^로 시작해야한다.
    • `^hi' -> 'hi', 'hi guys', 'hi everyone~'
  • ^n$
    • n으로 시작해서 끝나야 한다.
  • [a-zA-Z0-9+-_.] : a에서 z까지, A-Z까지, 0-9까지 +기호, -기호, _.을 포함한 문자열만 포함한다.
  • +@
    • 여기서 +는 왼쪽문자열이 반드시 하나이상 나와야한다.
    • @는 왼쪽문자열이 반드시 하나이상 존재하고 그 옆에 @가 와야한다.
  • \. : 이 자리에 반드시 실제 .이 와야한다.
  • +$ : +앞에 문자열이 하나이상 존재해야하고, 거기서 끝이다.

'\d{3}-\d{3,4}-\d{4}'

  • 휴대폰 번호 표현식
  • `\d' : [0-9] = [0123456789] 와 같다.
    • 만약 ^[0-9] : 문자열이0~9중 숫자로 시작해야한다.
    • 그러나 [^0-9] : 0~9를 제외한 나머지 문자열을 허락한다.....
  • {3} : 3자리 숫자가 있어야 한다.
  • {3,4} : 3~4자리 숫자가 있어야한다.
  • - : 이곳에 -가 있어야한다.

3. 텍스트를 음성으로 변환하기

GTTS 설치

  • Anaconda.org에서 GTTS를 검색해서 설치 방법을 확인한다.
from gtts import gTTS

text = "안녕하세요"
tts = gTTS(text=text, lang='ko')

tts.save('hello.mp3')

  • 위 코드 실행 후, 음성파일이 생겼다.
  • AWS 에서 Amazon Polly 서비스가 있다.

파이썬에서 파일다루기

file = 'hello.txt'
f = open(file, 'w')
f.write('GoodMorning')
f.write('GoodEvening')
f.close()
  • 위 코드로 파일을 열고, text를 입력하고, 다시 닫아 줄 수 있다.
  • w : write 쓰기모드

4. QR코드 생성하기

설치

  • conda install -n base -c conda-forge qrcode pillow
    • forty 환경에 에러가 있어, base에 설치했다.
import qrcode

qr_data = 'www.naver.com'
qr_img = qrcode.make(qr_data)

save_path = qr_data[4:-4] + '.png'
qr_img.save(save_path)
  • 위 코드로 qr코드를 생성하면
  • QR코드가 생성되었고, 잘 읽힌다.

strip

  • 텍스트의 왼쪽, 오른쪽의 공백을 제거해준다.
  • 공백뿐만 아니라, 문자도 제거할 수 있다. (! or * )를 제거한다.`

split

  • 문자열을 쪼개준다.
  • 인자(문자열)를 주지 않으면 띄어쓰기로 구분해서 쪼개준다.
  • join으로 다시 붙힐 수 있다.

5. 컴퓨터 정보 확인하기

가상메모리

  • 기계에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 것이다.
  • 하드디스크를 이용하여 메모리처럼 사용하는 것이다.

import psutil

  • 컴퓨터의 정보를 확인할 수 있도록 도와주는 모듈이다.

import itertools

  • itertools.count(num) : num을 포함하여 num부터 무한대까지 값을 출력한다.
  • itertools.cycle : 범위를 반복한다.
  • accumulate([1, 2, 3, 4, 5]) : --> 1, 3, 6, 10, 15 누적합을 제공한다.
  • chain 은 리스트를 연결(chain)해준다.
  • product : 중복해서 k길이의 조합을 만들어준다.
  • permutations : 중복을 제외한 k길이의 조합을 만들어준다.
  • combinations : 순서에 상관없는 중복을 제와한 조합을 만들어준다.

6. 압축파일 암호 푸는 프로그램

암호 생성 (문자열생성)

  • 간단하게 만들어 준다.
  • 모든 알파벳+숫자를 배열로 만들고, product로 최대 repeat개 까지 조합한 결과 리스트를 만들어본다.
  • 0 -> ZZZ 까지 출력된 것을 볼 수 있다.
  • 같단한 압축파일을 만들고 암호를 간단하게 걸어본다.
    암호의 최소길이부터 최대길이까지 반복문을 돌리고 압축파일 열기를 해본다.
  • 암호가 안맞으면 에러가 나오기 때문에 try, catch문을 만들어준다.
  • 다만 문제가 있다. break로 빠져나오면 아직 for문이 남아있기 때문에 글자수+1 해서 다시 반복문이 돌아가게 된다.
  • 45분이 걸려서 비밀번호를 찾아냈다.

7-2. 웹 크롤링

Beautiful Soup

  • HTML(Hyper Text Markup Language)와 XML(eXtreame HTTP)파일로부터 데이터를 뽑아내기 위한 파이썬 라이브러리이다.

HTML

  • HTML은 초기에는 긴 헤더가 필요했지만, HTML5에서 로 짧아졌다.
  • 여러가지 태그들이 계층적(Hierachical) 구조를 가지고 있다.
  • bs4에서 BeautifulSoup를 import해준다.
    soup.prettify()는 태그별로 사람이 보기 좋게 출력해준다.
  • soup.find 함수를 이용하여, 태그별, 클래스별, id별로 찾을 수 있다.
import requests
from bs4 import BeautifulSoup

def get_exchange_rate(target1, target2):
    headers = {
        'User-Agent' : 'Mozilla/5.0',
        'Content-Type' : 'text/html; charset-utf-8'
    }	 # html의 헤더

    response = requests.get("https://kr.investing.com/currencies/{}-{}".format(target1, target2), headers=headers) #인베스팅 웹 사이트에서 target1, 2 의 정보의 페이지에 들어가 크롤링 한다 header는 미리 정의한 헤더를 사용한다.
    content = BeautifulSoup(response.content, 'html.parser') # 크롤링해온 데이터를 html형식으로 번역(parser)한다.
    container = content.find('span', {'data-test' : 'instrument-price-last'}) # 번역(parser)한 데이터에서 span태그의 data-test=innstrument-price-last 정보를가진 아이템을 찾는다.
    print(container.text) #운좋게도 유니크한 정보라 바로 출력해보면 환율이 나온다.

8. 쓰레드를 사용한 프로그램

  • 쓰레드는 일꾼이다. 하나의 프로세스가 두개의 쓰레드를 사용하면 하나의 작업에 일꾼이 두명인 것이다.
  • 메인쓰레드와 서브 스레드가 각자 동작을 출력한다.

9. 영어로된 문서를 한글로 자동번역하기

googletrans

  • 최신 버전은 4.0.0 이다.
  • pip install googletrans==4.0.0-rc1
  • AWS에서 Amazon Translator 서비스와 비슷하다.

10. 오토마우스를 이용한 웹페이지 자동화

  • 현재 마우스의 위치를 출력한다.
import pyautogui
import time
import pyperclip

pyautogui.moveTo(1383, 268, 0.2) #마우스를 0.2초후에 1383, 268로 옮긴다.
pyautogui.click() # 클릭하기
time.sleep(0.5) # 0.5초 대기

pyperclip.copy("서울날씨") #서울날씨 텍스트를 복사
pyautogui.hotkey("ctrl", "v") # hotkey 동시에 눌러주는 키
time.sleep(0.5) #0.5초 대기

pyautogui.write(["enter"]) #엔터 입력
time.sleep(1) 

  • 원하던대로 서울날씨가 검색되었다.

12. 엑셀의 정보를 불러와 수료증 자동생성

데이터 구조에 따른 분류

1. 구조적 데이터 (Structured Data)

  • 데이터 분석에 바로 적용
  • 테이블성 데이터 : 테이블, CSV, TSV, Spreadsheet

2. 반구조적 데이터(Semi-Structured Data)

  • json
  • XML
    • HTML의 구조처럼 데이터를 담는다. 태그에 키를 담고 괄호 안에 값을 담는다. HTML을 Json처럼 사용한다 생각 할 수 있겠다.
  • yaml

3. 비구조적 데이터(Unstructured Data), raw data

  • sns, 기사, 소설, 댓글....
  • 음성데이터, 사진, 동영상...

Pandas

  • 각 리스트들을 행으로 3개의 열을 가진 데이터 테이블을 생성하였다.
  • len(df)하면 row(행)의 개수가 출력된다.
  • 컬럼, 속성명 변경
  • 컬럼별 검색
  • 똑같은 df.iloc이지만 리스트로 감싸면 시리즈가 아니라 DataFrame으로 나온다.
  • 또, 엑셀, CSV파일등으로 저장이 가능하다.
profile
Talking Potato

0개의 댓글