3-4 파이썬 시작하기
파이썬을 설치한다는 것은 컴퓨터가 알아들을 수 있는 언어로 번역을 해주는 일종의 '번역팩'을 설치한다고 생각하면 된다.
이러한 파이썬의 장점은 javascript보다 매우 직관적이라는 점이다.
📌 python project file
만들기
이때 venv파일을 반드시 만들어줘야 한다 !
📌 python
실행하기
파이썬을 실행할 때는 반드시 오른쪽 마우스 ➡ run 'hello' 누른다
📌 python error
해결하기
이때 에러설명을 복사해서 구글링하면 이미 많은 사람들이 해당 에러에 대해 올려놨으니까 참고하기 !
✔ 변수를 담을 때 문자열은 작은따옴표 ''
를 사용한다.
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형과 동일하다.
✔ 리스트 자료형은 순서가 중요 하게 변수를 담는 형태이다.
✔ 꺽쇠 []
로 나타낸다.
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
자바스크립트의 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
# 리스트 안에 딕셔너리가 있는 형태
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)
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
# 리스트의 요소들을 하나씩 꺼내온다.
for fruit in fruits :
print(fruit)
# 결과
사과
배
배
감
수박
귤
딸기
사과
배
수박
---------------------------------------------------------------------
# 응용 : 사과의 개수를 세기
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
count = 0
for fruit in fruits:
if fruit == '배':
count += 1
print(count)
# 결과
3
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)
✔ 가상환경은 격리된 실행환경으로, 프로젝트별로 사용하는 패키지들을 담아두는 폴더이다.
가상환경을 통해 프로젝트에서 사용하는 패키지와 버전을 관리할 수 있다.
정리하자면, 가상환경은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리되 실행 환경이다.
✔ file
➡ setting
✔ python interpreter
➡ ➕
✔ package
검색 ➡ install package
Python Package
종류requests
import requests # requests 라이브러리 설치 필요
r = requests.get('URL')
rjson = r.json()
print(rjson)
✔ 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
가져오기태그로 정보를 솎아낼 때 크롬 개발자도구를 참고할 수도 있다.
✔ 원하는 부분에서 마우스 우클릭 ➡ 검사
✔ 원하는 태그에서 마우스 우클릭 ➡ copy
➡ copy 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()
은 문자열 오른쪽에 있는 공백을 제거