Python

정보구니·2021년 10월 28일
0

programing basic

목록 보기
7/12
post-thumbnail

3-4 파이썬 시작하기

Python


파이썬을 설치한다는 것은 컴퓨터가 알아들을 수 있는 언어로 번역을 해주는 일종의 '번역팩'을 설치한다고 생각하면 된다.

이러한 파이썬의 장점은 javascript보다 매우 직관적이라는 점이다.




Python 사용방법


📌 python project file 만들기

이때 venv파일을 반드시 만들어줘야 한다 !


📌 python 실행하기

파이썬을 실행할 때는 반드시 오른쪽 마우스 ➡ run 'hello' 누른다


📌 python error 해결하기

이때 에러설명을 복사해서 구글링하면 이미 많은 사람들이 해당 에러에 대해 올려놨으니까 참고하기 !




Python 문법


변수

✔ 변수를 담을 때 문자열은 작은따옴표 ''를 사용한다.

a = 3         # 3을 a 변수에 넣는다
b = 2         # a를 b 변수에 넣는다
print(a+b)    # 5가 출력됨


first_name = 'yujeong'        
last_name = 'lim'
print(last name + first_name)   # lim yujeong가 출력됨


num = 2
print(first_name + num)    # error


# 문자+숫자는 불가능, 숫자를 문자열로 바꿔서 더해준다.
num = '2'
print(first_name + num)   # yujeong2가 출력됨

자료형

숫자, 문자

# 변수에는 문자열이 들어갈 수도 있고,
name = 'bob'

# 숫자가 들어갈 수도 있고,
num = 12 

# True 또는 False -> Boolean형이 들어갈 수도 있다.
is_number = True 

List

자바스크립트의 List형과 동일하다.

✔ 리스트 자료형은 순서가 중요 하게 변수를 담는 형태이다.
✔ 꺽쇠 []로 나타낸다.

a_list = []

# 리스트에 요소 추가하기
a_list.append(1)       # 리스트에 1을 넣는다
a_list.append([2,3])   # 리스트에 [2,3]이라는 리스트를 넣는다

print (a_list)          # [1,[2,3]]
print (a_list[0])       # 1
print (a_list[1])       # [2,3]
print (a_list[1][0])    # 2

Dicthionary

자바스크립트의 List형과 동일하다.

✔ 딕셔너리 자료형은 key : value 값의 묶음으로 변수를 담는 형태이다.
✔ 중괄호 {}로 나타낸다.

a_dict = {}

# 딕셔너리에 키:밸류 추가하기
a_dict = {'name':'bob','age':21}
a_dict['height'] = 178

print (a_dict)             # {'name':'bob','age':21, 'height':178}
print (a_dict)['name']     # bob
print (a_dict)['age']      # 21
print (a_dict)['height']   # 178

List + Dicthionary 조합

# 리스트 안에 딕셔너리가 있는 형태
people = [{'name':'bob','age':20},{'name':'carry','age':38}]

print(people[0]['name'])   # bob
print(people[1]['name'])   # carry


# 리스트에 딕셔너리 키:밸류 추가하기
person = {'name':'john','age':7}
people.append(person)

print(people)              # [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}]
print(people[2]['name'])   # john

함수

프로그램에서 함수는 부르면 정해진 동작을 하는 것 이다.

기본 생김새

def로 함수를 만든다.

# 만들기
def 함수이름(필요한 변수) :
	return 내릴 명령
    
    
# 예시
def sum(num1,num2) :
	return num1+num2
    
result = sum(2,3)
print(result)       # 5가 출력됨

📌 파이썬은 tab이 굉장히 중요하다 !

:가 나오면 그 안에 내용물이 들어가는 것이므로 반드시 tab을 해줘야한다.


조건문

if/ else로 구성된다.

age = 25

if age > 20:
    print('성인입니다')
else:
    print('청소년입니다')

# 결과
성인입니다

-----------------------------------

# 함수로 조건문 만들기
def is_adult(age) : 
    if age > 20 : 
        print('성인입니다')
    else : 
        print('청소년입니다')

is_adult(30)
is_adult(15)

#결과
성인입니다
청소년입니다

반복문

파이썬에서 반복문은 리스트의 요소들을 하나씩 꺼내쓰는 형태이다.

따라서 항상 리스트함께 쓰인다 !

기본 생김새

for sample in samples :
	print(sample)

반복문 예제 (List)

fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

# 리스트의 요소들을 하나씩 꺼내온다.
for fruit in fruits :
	print(fruit)


# 결과
사과
배
배
감
수박
귤
딸기
사과
배
수박

---------------------------------------------------------------------

# 응용 : 사과의 개수를 세기
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

count = 0
for fruit in fruits:
	if fruit == '배':
		count += 1

print(count)

# 결과
3

반복문 예제 (List + Dictionary)

people = [{'name': 'bob', 'age': 20}, 
          {'name': 'carry', 'age': 38},
          {'name': 'john', 'age': 7},
          {'name': 'smith', 'age': 17},
          {'name': 'ben', 'age': 27}]

# 모든 사람의 이름과 나이를 출력한다.
for person in people :
    print(person['name'], person['age'])

# 결과
bab 20
carry 38
john 7
smith 17
ben 27

-----------------------------------------------------

people = [{'name': 'bob', 'age': 20}, 
          {'name': 'carry', 'age': 38},
          {'name': 'john', 'age': 7},
          {'name': 'smith', 'age': 17},
          {'name': 'ben', 'age': 27}]

# 반복문과 조건문 응용하기
for person in people :
    if person['age'] < 20 :
    	print(person)

# 결과
{'name': 'john', 'age': 7}
{'name': 'smith', 'age': 17}




Python Package


파이썬은 사람들이 만들어 놓은 '라이브러리'가 엄청나게 많은 것으로 유명하다.
우리는 외부 라이브러리를 사용하기 위해 패키지를 설치해야한다 !

패키지는 모듈(일종의 기능들 묶음)을 모아놓은 단위이며, 이런 패키지의 묶음을 라이브러리라고 볼 수 있다.



가상환경 (venv)


✔ 가상환경은 격리된 실행환경으로, 프로젝트별로 사용하는 패키지들을 담아두는 폴더이다.

가상환경을 통해 프로젝트에서 사용하는 패키지와 버전을 관리할 수 있다.

정리하자면, 가상환경은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리되 실행 환경이다.



패키지 설치방법


filesetting

python interpreter

package 검색 ➡ install package




Python Package 종류


requests

기본코드

import requests # requests 라이브러리 설치 필요

r = requests.get('URL')
rjson = r.json()

print(rjson)

예제 (서울시 미세먼지 API)

requests 기본 코드 넣기

import requests # requests 라이브러리 설치 필요

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

print(rjson)

모든 구의 미세먼지 값 찍어주기

for __ in __ 반복문을 이용한다.

import requests # requests 라이브러리 설치 필요

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

gus = rjson['RealtimeCityAir']['row']

for gu in gus :
    gu_name = gu['MSRSTE_NM']
    gu_mise = gu['IDEX_MVL']    
    print(gu_name, gu_mise)


# 결과
중구 62.0
종로구 63.0
용산구 62.0
은평구 66.0
.
.
.

미세먼지 값이 65 이상인 구만 찍어주기

if 조건문을 이용한다.

import requests # requests 라이브러리 설치 필요

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

gus = rjson['RealtimeCityAir']['row']

for gu in gus :
    gu_name = gu['MSRSTE_NM']
    gu_mise = gu['IDEX_MVL']
    if (gu_mise > 65) :
        print(gu_name, gu_mise)


# 결과
은평구 66.0
.
.
.




크롤링 (웹스크래핑)


크롤링이란 내가 받아온 것을 솎아내는 것을 말한다.

크롤링을 할 때 중요한 기술 2가지
요청하는 것
✔ 요청해서 가져온 html 중 내가 원하는 정보를 잘 솎아내는 것내가 원하는 정보를 잘 솎아내는 것


📌 이때 requests요청하고, beautifulsoup4로 필요한 정보만 솎아낸다 !



크롤링 기본코드 (bs4)


import requests
from bs4 import BeautifulSoup

# (requests) : 타겟 URL을 읽어서 HTML를 받아옴 
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('URL',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

# 코딩시작



크롤링 하기


html에서 tag 가져오기

태그로 정보를 솎아낼 때 크롬 개발자도구를 참고할 수도 있다.
✔ 원하는 부분에서 마우스 우클릭 ➡ 검사
✔ 원하는 태그에서 마우스 우클릭 ➡ copycopy selector로 복사


soup .select /.select_one

bs4 패키지를 사용해 정보를 솎아낼때 select/ select_one를 써준다.

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')

print(title)


# 결과
<a href="/movie/bi/mi/basic.naver?code=171539" title="그린 북">그린 북</a>

.text / ['속성']

✔ 태그 안의 텍스트를 솎아내고 싶다면 ➡ 태그.text
✔ 태그 안의 속성을 솎아내고 싶다면 ➡ 태그['속성']

# 텍스트만 가져옴
print(title.text)

# 결과
그린북

---------------------------------------------------------------------------

# 속성만 가져옴
print(title['href'])

# 결과
/movie/bi/mi/basic.naver?code=171539




Quiz - 크롤링(영화)


네이버영화페이지 ➡ 순위, 제목, 별점 크롤링 해오기



완성 코드

import requests
from bs4 import BeautifulSoup

# URL을 읽어서 HTML를 받아오고,
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies (tr들) 의 반복문을 돌리기
for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        rank = movie.select_one('td:nth-child(1) > img')['alt'] # img 태그의 alt 속성값을 가져오기
        title = a_tag.text                                      # a 태그 사이의 텍스트를 가져오기
        star = movie.select_one('td.point').text                # td 태그 사이의 텍스트를 가져오기
        print(rank,title,star)
        


# 결과
01 그린 북 9.60
02 가버나움 9.59
03 베일리 어게인 9.52
04 주전장 9.52
05 포드 V 페라리 9.51
06 아일라 9.49
.
.
.




Quiz - 크롤링(지니뮤직)


지니뮤직 ➡ 순위, 노래제목, 가수이름 크롤링 해오기



완성코드

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbpymongo

# URL(지니뮤직)을 읽어서 HTML를 받아오고,
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

# musics (tr들) 의 반복문을 돌리기
for music in musics:
    rank = music.select_one('td.number').text[0:2].strip()
    title = music.select_one('td.info > a.title.ellipsis').text.strip()
    artist = music.select_one('td.info > a.artist.ellipsis').text.strip()

    print(rank, title, artist)


# 결과
1 아로하 조정석
2 시작 가호 (Gaho)
3 처음처럼 엠씨더맥스 (M.C the MAX)
4 이제 나만 믿어요 임영웅
5 아무노래 지코 (ZICO)
6 흔들리는 꽃들 속에서 네 샴푸향이 느껴진거야 장범준
7 뭔가 잘못됐어 권진아
.
.
.



문제상황

◽ 문자열 슬라이싱 [ : ]

rank를 크롤링해오는 과정에서 다음과 같은 문제가 발생했다.

순위 상승 하강에 대한 정보는 필요하지 않기 때문에 데이터 클렌징이 필요하다. 나는 우선 '파이썬 문자열 자르기'라고 구글링 해보았다.


📌 문자열 슬라이싱
파이썬에는 슬라이싱(slice)이라는 기능을 제공하며, 이는 가져오고 싶은 문자열의 범위를 지정할 수 있다.
[0:5]로 표현

[]는 슬라이싱할 범위를 지정할 때 사용
0시작위치5끝 위치를 의미
시작과 끝을 구분하기 위해 그 사이에 콜론 :을 사용한다.


따라서 순위의 정보만 깔끔하게 가져오기 위해서 [0:2]로 문자열을 슬라이싱 해주었다.



◽ 문자열 공백제거 .strip()

태그 안에 텍스트만 뽑아내기 위해 .text를 사용하였는데, 이 때 앞뒤에 공백들도 같이 나오면서 깔끔하게 크롤링이 되지 않는다.

이 문제를 해결하기 위해 '파이썬 공백제거'라고 구글링해보았다.


📌 문자열 공백제거
파이썬 공백제거 함수인 strip()문자열 양 끝에 있는 공백을 제거해준다.
➡ 문자열.strip() 으로 표현

strip()은 양 끝의 공백을 제거
lstrip()은 문자열 왼쪽에 있는 공백을 제거
rstrip()은 문자열 오른쪽에 있는 공백을 제거



🔎 참고
파이썬 공백제거 (replace,strip) 2가지 방법
문자열 인덱싱 및 슬라이싱

0개의 댓글

관련 채용 정보