일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 익명 클래스
- yield
- 정렬
- 자바스터디
- System.out
- 자바할래
- 제네릭 와일드 카드
- raw 타입
- 함수형 인터페이스
- 로컬 클래스
- Switch Expressions
- 브릿지 메소드
- docker
- 스파르타코딩클럽
- 합병 정렬
- throwable
- 람다식
- annotation processor
- System.err
- Study Halle
- github api
- 상속
- 바운디드 타입
- 접근지시자
- junit 5
- System.in
- 프리미티브 타입
- auto.create.topics.enable
- 제네릭 타입
- 항해99
Archives
- Today
- Total
코딩하는 털보
웹개발 종합반 WIL - 3W 본문
Python 기초 공부
Python 기초 문법
변수, 자료형
#숫자형, 문자열 num = 3 print(num+7) #10 email = 'rockintuna@kakao.com' print(email) #rockintuna@kakao.com #숫자형을 문자열로 만들기 print(email+str(num)) #rockintuna@kakao.com3 #리스트 a_list = ['사과', '배', '수박'] #리스트 원소 추가하기 a_list.append('포도') print(a_list) #['사과', '배', '수박', '포도'] #딕셔너리 a_dict = {'name':'bob', 'age':27} print(a_dict['name']) #bob #딕셔너리 쌍 추가하기 a_dict['height'] = 175 print(a_dict) #{'name': 'bob', 'age': 27, 'height': 175}
함수
파이썬에서 함수의 내용은 따로 중괄호같은 표시로 묶여있지 않고 줄맞춤으로 구분한다.
#함수 선언하기 def sum(num1, num2): print('hi') return num1 + num2 # 여기까지 함수 내용 print(sum(3, 7)) # 10
조건문
def check_age(age): if age > 20: print('성인입니다.') else: print('청소년입니다.') #탭(줄맞춤)이 매우매우 중요! check_age(30) # 성인입니다. check_age(15) # 청소년입니다.
반복문
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박'] # 반복문으로 리스트 요소 사용하기 for fruit in fruits: print(fruit) # 수박 개수 세기 count = 0 for fruit in fruits: if fruit == '수박': count += 1 print(count) # 2 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']) # bob # carry # john # smith # ben
파이썬 패키지 사용해보기
패키지
- 파이썬의 패키지는 모듈을 모아 놓는 단위이다.
- 패키지의 묶음을 라이브러리라고 할 수 있다.
- 파이썬은 이미 만들어놓은 라이브러리가 방대하기로 유명하다.
가상환경(virtual environment)
- 프로젝트별 공구함
- 다른 프로젝트(다른 파이썬 응용 프로그램)의 동작에 영향을 주지 않기 위해 프로젝트마다 격리된 실행 환경을 가지게 한다.
- 프로젝트별로 독립적으로 패키지를 사용할 수 있다.
- 라이브러리를 담아두는 디렉토리. (venv)
프로젝트 설정에서 패키지를 설치할 수 있다.
설치가 완료되면 venv에 설치된 패키지가 보인다.
패키지 사용해보기
파이썬 requests 패키지는 API 요청을 아주 쉽게 해준다.
- 서울시 Open API를 이용하여 구별 미세먼지 정보 가져오기
import requests # requests 라이브러리 설치 필요
# GET 요청
r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rows = r.json()['RealtimeCityAir']['row']
for row in rows:
gu_name = row['MSRSTE_NM']
gu_mise = row['IDEX_MVL']
print(gu_name, gu_mise)
웹스크래핑(크롤링) 기초
웹페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 기법이다.
서버로부터 가져온 HTML파일을 사용하여 데이터를 추출한다.
파이썬 크롤링 패키지 (Beautiful Soup)
bs4
beautifulsoup 내 select 함수에 미리 정의된 방법 사용하기
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')
# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
BeautifulSoup를 사용하여 크롤링 해보기
네이버 영화 랭킹 페이지에서 영화 순번, 이름, 별점 리스트 가져오기
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)
#data.text는 받아온 HTML문이다.
soup = BeautifulSoup(data.text, 'html.parser')
# 특정 태그 선택하기(단일)
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')
# 태그의 텍스트 가리키기
print(title.text) # 그린 북
# 태그의 속성 가리키기
print(title['href']) # /movie/bi/mi/basic.naver?code=171539
# 특정 태그 선택하기(여러개), select()는 리스트를 반환한다.
trs = soup.select('#old_content > table > tbody > tr')
for tr in trs:
a_tag = tr.select_one('td.title > div > a')
if a_tag is not None:
num = tr.select_one('td:nth-child(1) > img')['alt']
point = tr.select_one('td.point').text
print(num, a_tag.text, point)
# 01 그린 북 9.60
# 02 가버나움 9.59
# 03 디지몬 어드벤처 라스트 에볼루션 : 인연 9.54
# 04 원더 9.52
# 05 먼 훗날 우리 9.52
# ...
데이터베이스
데이터를 잘 찾아쓰기 위해 사용하는 데이터 관리 프로그램
RDBMS
정형화되어있는 데이터를 저장한다. 높은 데이터 일관성을 가지고 있다.
- MySQL, MSSQL, Oracle, ...
NoSQL
비정형 데이터를 저장한다. 딕셔너리 형태로 데이터를 저장하기 때문에 유연하게 데이터를 적재할 수 있다. 그러나 RDBMS에 비해 일관성이 부족할 수 있다.
- mongoDB, cassandra, Redis, ...
pymongo로 mongoDB 조작하기
pymongo : 파이썬에서 mongoDB를 조작할 수 있는 라이브러리이다.
from pymongo import MongoClient
# DB connection
client = MongoClient('localhost', 27017)
db = client.dbsparta
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
# 한 개 찾기 - 예시 ('name'이 'bobby'만 찾기)
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기 - 예시 (21세만, _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))
# 바꾸기 - 예시 ('name'이 'bobby'만 19세로)
# update_many도 있지만 잘 쓰이지 않는다.
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 지우기 - 예시 ('name'이 'bobby'만 삭제)
db.users.delete_one({'name':'bobby'})
mongoDB에 크롤링 결과 저장하기
import requests
from pymongo import MongoClient
from bs4 import BeautifulSoup
client = MongoClient('localhost', 27017)
db = client.dbsparta
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')
trs = soup.select('#old_content > table > tbody > tr')
for tr in trs:
a_tag = tr.select_one('td.title > div > a')
if a_tag is not None:
rank = tr.select_one('td:nth-child(1) > img')['alt']
star = tr.select_one('td.point').text
doc = {'rank': rank, 'title': a_tag.text, 'star': star}
db.movies.insert_one(doc)
퀴즈
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
# '매트릭스' 평점 가져오기
matrix = db.movies.find_one({'title':'매트릭스'})
star = matrix['star'];
print(star)
# '매트릭스' 평점과 같은 영화들
movies = list(db.movies.find({'star':star},{'_id':False}))
for movie in movies:
print(movie['title'])
# '매트릭스' 평점 0으로 바꾸기
db.movies.update_one({'title':'매트릭스'}, {'$set':{'star':'0'}})
Comments