[수업 목표]
- 파이썬 기초 문법을 안다.
- 원하는 페이지를 크롤링 할 수 있다.
- pymongo를 통해 mongoDB를 제어할 수 있다.
🔴 수업을 위해 설치/가입 할 것들
1. 파이썬(윈도우) 다운로드 :
https://www.python.org/ftp/python/3.8.6/python-3.8.6-amd64.exe |
주의) Add Python 3.8 to PATH 에 체크해야 합니다!! |
2. (윈도우만!) Git bash
다운로드: https://git-scm.com/ |
🔴 pip(python install package) 사용 - requests 패키지 설치해보기
project interpreter 화면에서 + 버튼을 누르면 아래 창이 뜹니다! |
![]() |
requests를 검색하기! |
![]() |
🔴 파이썬 기초공부
1) 변수 & 기본연산
a = 3 # 3을 a에 넣는다 b = a # a를 b에 넣는다 a = a + 1 # a+1을 다시 a에 넣는다 num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다 num2 = 99 # 99의 값을 num2이라는 변수에 넣는다 # 변수의 이름은 마음대로 지을 수 있음! # 진짜 "마음대로" 짓는 게 좋을까? var1, var2 이렇게? |
2) 자료형
숫자, 문자형 |
name = 'bob' # 변수에는 문자열이 들어갈 수도 있고, num = 12 # 숫자가 들어갈 수도 있고, is_number = True # True 또는 False -> "Boolean"형이 들어갈 수도 있습니다. ######### # 그리고 List, Dictionary 도 들어갈 수도 있죠. 그게 뭔지는 아래에서! |
리스트 형 (Javascript의 배열형과 동일) |
a_list = [] a_list.append(1) # 리스트에 값을 넣는다 a_list.append([2,3]) # 리스트에 [2,3]이라는 리스트를 다시 넣는다 # a_list의 값은? [1,[2,3]] # a_list[0]의 값은? 1 # a_list[1]의 값은? [2,3] # a_list[1][0]의 값은? 2 |
Dictionary 형 (Javascript의 dictionary형과 동일) |
a_dict = {} a_dict = {'name':'bob','age':21} a_dict['height'] = 178 # a_dict의 값은? {'name':'bob','age':21, 'height':178} # a_dict['name']의 값은? 'bob' # a_dict['age']의 값은? 21 # a_dict['height']의 값은? 178 |
Dictionary 형과 List형의 조합 |
people = [{'name':'bob','age':20},{'name':'carry','age':38}] # people[0]['name']의 값은? 'bob' # people[1]['name']의 값은? 'carry' person = {'name':'john','age':7} people.append(person) # people의 값은? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}] # people[2]['name']의 값은? 'john' |
3) 함수
함수의 정의 - 이름은 마음대로 정할 수 있음! |
# 수학문제에서 f(x) = 2*x+3 y = f(2) y의 값은? 7 # 참고: 자바스크립트에서는 function f(x) { return 2*x+3 } # 파이썬에서 def f(x): return 2*x+3 y = f(2) y의 값은? 7 |
함수의 응용 |
def sum_all(a,b,c): return a+b+c def mul(a,b): return a*b result = sum_all(1,2,3) + mul(10,10) # result라는 변수의 값은? |
4) 조건문
if / else 로 구성 |
def oddeven(num): # oddeven이라는 이름의 함수를 정의한다. num을 변수로 받는다. if num % 2 == 0: # num을 2로 나눈 나머지가 0이면 return True # True (참)을 반환한다. else: # 아니면, return False # False (거짓)을 반환한다. result = oddeven(20) # result의 값은 무엇일까요? |
def is_adult(age): if age > 20: print('성인입니다') # 조건이 참이면 성인입니다를 출력 else: print('청소년이에요') # 조건이 거짓이면 청소년이에요를 출력 is_adult(30) # 무엇이 출력될까요? |
5) 반복문
4즉, 무조건 리스트와 함께 쓰입니다! |
fruits = ['사과','배','감','귤'] for fruit in fruits: print(fruit) # 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다. |
과일 갯수 세기 함수 | |
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박'] count = 0 for fruit in fruits: if fruit == '사과': count += 1 print(count) # 사과의 갯수를 세어 보여줍니다. |
def count_fruits(target): count = 0 for fruit in fruits: if fruit == target: count += 1 return count subak_count = count_fruits('수박') print(subak_count) #수박의 갯수 gam_count = count_fruits('감') print(gam_count) #감의 갯수 |
딕셔너리 예제 |
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']) # 이번엔, 반복문과 조건문을 응용한 함수를 만들어봅시다. # 이름을 받으면, age를 리턴해주는 함수 def get_age(myname): for person in people: if person['name'] == myname: return person['age'] return '해당하는 이름이 없습니다' print(get_age('bob')) print(get_age('kay')) |
🔴 파이썬 프로그래밍 추가 학습 사이트 :
예제로 배우는 파이썬 프로그래밍
파이썬 프로그래밍 학습 사이트 파이썬 전자책(eBook) 출간
pythonstudy.xyz
🔴 웹스크래핑(크롤링) 기초
패키지 추가 설치하기(beautifulsoup4) |
bs4 |
크롤링 기본 세팅 |
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.naver?sel=pnt&date=20210829',headers=headers) # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦 # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨 # 이제 코딩을 통해 필요한 부분을 추출하면 된다. soup = BeautifulSoup(data.text, 'html.parser') ############################# # (입맛에 맞게 코딩) ############################# |
🔴 mongoDB 시작하기
회원가입하기 : 구글로 로그인하고 → Accept Privacy ... Service 에 체크 → Submit 합니다. |
https://account.mongodb.com/account/register |
🔴 mongoDB 연결하기
1️⃣ 패키지 설치하기 |
pymongo, dnspython |
2️⃣ 다시, mongoDB Atlas 화면에서 Connect your application 클릭 |
|
3️⃣ pymongo로 조작하기 |
from pymongo import MongoClient client = MongoClient('여기에 URL 입력') db = client.dbsparta |
4️⃣ 잘 연결됐는지 테스트해보기 |
doc = { 'name':'bob', 'age':27 } db.users.insert_one(doc) |
5️⃣ 다시 Cluster0의 Collections를 확인하면! 데이터가 잘 들어온 것을 확인 할 수 있답니다! |
|
6️⃣ DB연결하기 & 데이터 넣기 |
# 'users'라는 collection에 {'name':'bobby','age':21}를 넣습니다. db.users.insert_one({'name':'bobby','age':21}) db.users.insert_one({'name':'kay','age':27}) db.users.insert_one({'name':'john','age':30}) |
7️⃣ 모든 결과 값을 보기 |
same_ages = list(db.users.find({},{'_id':False})) |
# 모든 데이터 뽑아보기 all_users = list(db.users.find({},{'_id':False})) print(all_users[0]) # 0번째 결과값을 보기 print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기 for user in all_users: # 반복문을 돌며 모든 결과값을 보기 print(user) |
|
8️⃣ 특정 결과 값을 뽑아 보기 |
user = db.users.find_one({'name':'bobby'}) print(user) |
9️⃣ 수정하기 |
# 오타가 많으니 이 줄을 복사해서 씁시다! db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) user = db.users.find_one({'name':'bobby'}) print(user) |
🔟 삭제하기 (거의 안 씀) |
db.users.delete_one({'name':'bobby'}) user = db.users.find_one({'name':'bobby'}) print(user) |
🔴 pymongo 사용법. 코드요약 |
# 저장 - 예시 doc = {'name':'bobby','age':21} db.users.insert_one(doc) # 한 개 찾기 - 예시 user = db.users.find_one({'name':'bobby'}) # 여러개 찾기 - 예시 ( _id 값은 제외하고 출력) all_users = list(db.users.find({},{'_id':False})) # 바꾸기 - 예시 db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) # 지우기 - 예시 db.users.delete_one({'name':'bobby'}) |
🔴 숙제 |
import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (HTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'} data = requests.get('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701', headers=headers) soup = BeautifulSoup(data.text, 'html.parser') trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr') for tr in trs: title = tr.select_one('td.info > a.title.ellipsis').text.strip() rank = tr.select_one('td.number').text[0:2].strip() artist = tr.select_one('td.info > a.artist.ellipsis').text print(rank, title, artist) |
![]() |
'PC n Program' 카테고리의 다른 글
[스파르타코딩클럽] 웹개발 종합반 - 5️⃣주차 개발일지 (0) | 2023.01.20 |
---|---|
🔴 [스파르타코딩클럽] 파이썬 문법 뽀개기 (0) | 2023.01.15 |
html에서 접기, 펼치기 folding기능 간단하게 구현하기(●'◡'●) (0) | 2023.01.04 |
[스파르타코딩클럽] 웹개발 종합반 - 2️⃣주차 개발일지 (0) | 2023.01.03 |
[스파르타코딩클럽] 웹개발 종합반 - 1️⃣주차 개발일지 (2) | 2022.12.31 |