K-digital 기초역량훈련
[패스트 캠퍼스] 코딩 1:8 | 웹 개발 왕초보 입문 (3주차)
1️⃣ 파이썬 (Python)
1991년 발표된 인터프리터 방식의 프로그래밍 언어 (비교적 최근 발표된 언어)
1-1. 파이썬 변수 할당법
# 변수에 숫자 대입
a = 10
b = 20
a + b
>>> 30
# 변수에 문자 대입 & 출력
a = "python"
print(a)
>>> python
자바스크립트의 'let', 'const' 같은 선언 없이 변수에 값을 할당하기만 하면 된다
msg = "hello world"
msg = "hi hello world" # 재할당
print(msg)
>>> hi hello world
자바스크립트는 변수/상수에 따라서 재선언/재할당 가능 유무가 달랐지만,
파이썬은 언제든 변수의 값을 다시 할당할 수 있다 (재할당)
1-2. if 조건문 (if ~ elif ~ else)
if 조건:
조건이 참일 때 실행될 명령문
if 조건:
조건이 참일 때 실행될 명령문
else:
조건이 거짓일 때 실행될 명령문
if 조건1:
조건1이 참일 때 실행될 명령문
elif 조건2:
조건1이 거짓이고 조건2가 참일 때 실행될 명령문
else:
조건1과 조건2가 모두 다 거짓일 때 실행될 명령문
a = 3
b = 5
if a < 1:
print("a is greater than 1")
elif b > 1:
print("b is greater than 1")
else:
print("I don't know")
>>> b is greater than 1
1-3. for 반복문
number = 100
data = [1, 2, 3, 4, 5]
for i in data:
print(i)
>>> 1
2
3
4
5
number = 100
data = [1, 2, 3, 4, 5]
for i in range(10):
print(i)
>>> 1
2
3
4
5
6
7
8
9
range(n)이란 0부터 n까지의 범위라는 의미
2️⃣ 파이썬 패키지 (Python packages)
웹 요청을 만드는 라이브러리
2-1. 터미널에서 pip requests 설치하기
: pip install requests (windows)
: pip3 install requests (macOS)
2-2. 프로젝트별로 독립된 패키지 관리하는 법
: python3 -m venv venv (macOS) - 가상환경 폴더 만들기
: source venv/bin/activate 입력 하면 커서 제일 앞에 (venv)가 뜸 - 가상환경 접속 완료
(venv) junehee$
: pip3 install requests 다시 입력하면 다시 설치 시작 - Successfully installed 확인되면 설치 완료
설치가 완료 되면 venv 폴더에 'requests' 파일이 만들어진 것을 확인 가능
2-3. 가상환경 나가기
: .\venv\Scripts\deactivate.bat (windows)
: deactivate (macOS)
$ deactivate
$
2-4. 가상환경 삭제
: sudo rm -rf 가상환경이름
(...이라는데 아직 시도는 안해보았습니다)
3️⃣ 웹 스크래핑 / 웹 크롤링
3-1. 웹 스크래핑이란?
특정 웹 페이지로부터 유용한 데이터를 추출해오는 작업 자체
3-2. 웹 크롤링이란?
크롤러(crawler)를 통하여 웹(WWW: world wide web)상의 정보를 탐색하고 수집하여 데이터를 추출하는 작업
'기어다니다' 라는 뜻에 걸맞게 불특정 웹을 반복적으로 방문하여 정보를 탐색/수집하는 과정 (검색엔진의 뿌리)
크롤링이라는 단어 대신 스파이더링이라고 부르기도 한다
3-3. 웹 크롤러란?
규칙에 따라 자동으로 웹을 탐색하는 정보를 수집하는 컴퓨터 프로그램/인터넷 로봇
(웹 위를 기어다니는 거미와 같다하여 지어진 이름)
3-4. 크롤링 실습
터미널에서 beautifulsoup 설치
: pip install beautifulsoup4 (windows)
: pip3 install beautifulsoup4 (macOS)
BeautifulSoup 사용
# YES24 도서 베스트셀러 데이터를 크롤링 하는 예제
import requests
from bs4 import BeautifulSoup
response = requests.get("http://www.yes24.com/24/category/bestseller")
soup = BeautifulSoup(response.text, "html.parser")
for i in range(40):
idx = str(i + 1)
if idx == "19":
idx = "19_line"
elif idx == "20":
idx = "20_line"
select_str = "#bestList > ol > li.num" + idx + " > p:nth-child(3) > a"
titles = soup.select_one(select_str)
print(titles.text)
import : 패키지를 가지고올 때 사용하는 구분
from A import B : A 안에서 B를 사용하겠다는 의미
response = requests.get(url) : requests의 get 함수를 이용하여 해당 url의 html 자료 받아오기
.select() : 조건에 맞는 전부 가져와 리스트로 출력
.select_one() : 조건에 맞는 하나를 출력
# 위 코드대로 실행 시 출력값 예시 (23. 02 ver)
김미경의 마흔 수업
슬램덩크 리소스-THE FIRST SLAM DUNK re:SOURCE
K 배터리 레볼루션
1퍼센트 부자의 법칙
만일 내가 인생을 다시 산다면 (10만 부 기념 스페셜 에디션)
악인론
주식 시세의 비밀
불편한 편의점
불편한 편의점 2
세이노의 가르침
원씽 THE ONE THING
정세현의 통찰
챗GPT
역행자
당신도 느리게 나이 들 수 있습니다
아버지의 해방일지
5천만 원으로 시작하는 미라클 기적의 재개발 재건축
생에 감사해
ETS 토익 정기시험 기출문제집 1000 Vol.3 READING 리딩
Go Go 카카오프렌즈 27 스위스
오늘 밤, 세계에서 이 사랑이 사라진다 해도
ETS 토익 정기시험 기출문제집 1000 Vol.3 LISTENING 리스닝
그리스 로마 신화 32
이은경쌤의 초등어휘일력 365
물고기는 존재하지 않는다
부자 아빠 가난한 아빠 20주년 특별 기념판
구의 증명
시간이 조금 걸리더라도
2023 이유진 국어 필사즉생 모의고사 백일기도 3 - 실전유형
기분이 태도가 되지 말자
내가 죽기로 결심한 것은 4
내가 죽기로 결심한 것은 3
우리는 모두 죽는다는 것을 기억하라
미스터 프레지던트
돈의 속성 200쇄 리커버
2023 큰별쌤 최태성의 별별한국사 한국사능력검정시험 심화(1,2,3급) 상
슬램덩크 신장재편판 1
돈의 규칙
보이지 않는 곳에서 애쓰고 있는 너에게
건강과 다이어트를 동시에 잡는 7대 3의 법칙 채소·과일식
4️⃣ 몽고DB (MongoDB)
테이블 형식의 데이터를 이용할 때 필요한거 SQL(=Structured Query Language)
몽고디비는 document 형식으로 데이터를 저장 - JSON 방식
4-1. 맥 macOS MongoDB 설치하기
터미널에서 homebrew(홈브류) 설치 (https://brew.sh/index_ko)
: /bin/bash -c "$(curl -fsSL https://raw.githubsercontent.com/Homebrew/install/HEAD/install.sh)"
: Password를 입력하라고 나오면 현재 사용 중인 비밀번호 입력
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Homebrew(홈브류)란?
macOS 전용 패키지 관리자.
터미널에서 명령어를 작성하여 자신이 필요한 프로그램의 설치, 삭제, 업데이트를 손쉽게 관리 할 수 있는 프로그램
homebrew 설치가 완료되면, 몽고DB를 설치
: brew tap mongodb/brew
: brew install mongodb-community
4-2. 맥 macOS MongoDB 사용
서버 시작 명령어
: brew services start mongodb-community
몽고DB 서버 시작이 성공적으로 완료 된 이후에,
몽고DB 기본 포트 27017 (http://localhost:27017)에 접속하여 아래 문구가 출력되면 정상 작동!
(제대로 작동되지 않았다면 해당 서버에 접속했을 때 사이트 연결이 되지 않음)
It looks like you are trying to access MongoDB over HTTP on the native driver port.
서버 종료 명령어
: brew services stop mongodb-community
4-3. 맥 macOS MongDB Compass 설치
https://www.mongodb.com/try/download/shell
파일 다운로드 후 Applications 로 드래그 하여 설치 완료
MongoDB Compass 실행
4-4. MongoDB 조작
터미널에서 pymongo 설치
: pip install pymongo (windows)
: pip3 install pymongo (macOS)
몽고DB 튜토리얼 접속 (https://pymongo.readthedocs.io/en/stable/tutorial.html/)
client = MongoClient('mongodb://localhost:27017/')
# .find() 사용
from pymongo.mongo_client import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client.local
collection = db.startup_log
rows = collection.find()
for row in rows:
print(row)
# .find_one() 사용
from pymongo.mongo_client import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client.local
collection = db.startup_log
row = collection.find_one()
print(row)
출력값 차이
# .find()
{'_id': 'gimjunhuiui-MacBookPro.local-1677139322619', 'hostname': 'gimjunhuiui-MacBookPro.local', 'startTime': datetime.datetime(2023, 2, 23, 8, 2, 2), 'startTimeLocal': 'Thu Feb 23 17:02:02.619', 'cmdLine':
.
.
(중간값 생략)
.
.
'storageEngines': ['devnull', 'ephemeralForTest', 'wiredTiger']}}
# .find_one()
<pymongo.cursor.Cursor object at 0x1073d1490>
몽고DB 컴패션에서 새로운 컬렉션 생성
Create collection > Collection Name > Create Collection (강의에서는 'fastcampus' 라고 지정)
컬렉션에 데이터 추가하기
.insert_one({ 추가 할 데이터 형식 })
from pymongo.mongo_client import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client.local
collection = db.fastcampus
collection.insert_one({
"title": "Fastcampus Course!",
"content": "3 Weeks Course"
})
row = collection.find_one()
print(row)
컴패션을 들어가보면 데이터가 갱신되어 있는 것을 확인 할 수 있다
컬렉션 조건을 걸고 데이터 검색하기
.fine_one({ 조건 })
from pymongo.mongo_client import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client.local
collection = db.fastcampus
collection.insert_one({
"title": "제목",
"content": "내용"
})
row = collection.find_one({'title': "제목"})
print(row)
>>> {'_id': ObjectId('63f72d1cbb4950018621151a'), 'title': '제목', 'content': '내용'}
# 출력된 id값은 자동으로 지정됨
컬렉션 생성과 동시에 데이터 저장하기
db['새로운 컬렉션명'].insert_one({ 추가할 데이터 형식})
import requests
from bs4 import BeautifulSoup
from pymongo.mongo_client import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client.local
response = requests.get("http://www.yes24.com/24/category/bestseller")
soup = BeautifulSoup(response.text, "html.parser")
for i in range(40):
idx = str(i + 1)
if idx == "19":
idx = "19_line"
elif idx == "20":
idx = "20_line"
select_str = "#bestList > ol > li.num" + idx + " > p:nth-child(3) > a"
titles = soup.select_one(select_str)
db['yes24'].insert_one({
'title': titles.text
})
위 코드 작성 후 몽고DB 컴패션으로 들어가서 Reload 해보면
아래 이미지처럼 새로운 컬렉션이 생성됨과 동시에 데이터도 함께 저장 됨
터미널에서 데이터 조회하기
import requests
from bs4 import BeautifulSoup
from pymongo.mongo_client import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client.local
collection = db.yes24
rows = collection.find()
for row in rows:
print(row)
# 위 코드 실행 후 터미널 출력값 예시
{'_id': ObjectId('63f72eddb2f136d421bebfa9'), 'title': '김미경의 마흔 수업'}
{'_id': ObjectId('63f72eddb2f136d421bebfaa'), 'title': '슬램덩크 리소스-THE FIRST SLAM DUNK re:SOURCE'}
{'_id': ObjectId('63f72eddb2f136d421bebfab'), 'title': 'K 배터리 레볼루션'}
{'_id': ObjectId('63f72eddb2f136d421bebfac'), 'title': '1퍼센트 부자의 법칙'}
{'_id': ObjectId('63f72eddb2f136d421bebfad'), 'title': '만일 내가 인생을 다시 산다면 (10만 부 기념 스페셜 에디션)'}{'_id': ObjectId('63f72eddb2f136d421bebfae'), 'title': '악인론'}
{'_id': ObjectId('63f72eddb2f136d421bebfaf'), 'title': '주식 시세의 비밀'}
{'_id': ObjectId('63f72eddb2f136d421bebfb0'), 'title': '불편한 편의점'}
{'_id': ObjectId('63f72eddb2f136d421bebfb1'), 'title': '불편한 편의점 2'}
{'_id': ObjectId('63f72eddb2f136d421bebfb2'), 'title': '세이노의 가르침'}
{'_id': ObjectId('63f72eddb2f136d421bebfb3'), 'title': '원씽 THE ONE THING'}
{'_id': ObjectId('63f72eddb2f136d421bebfb4'), 'title': '정세현의 통찰'}
{'_id': ObjectId('63f72eddb2f136d421bebfb5'), 'title': '챗GPT'}
{'_id': ObjectId('63f72eddb2f136d421bebfb6'), 'title': '역행자'}
{'_id': ObjectId('63f72eddb2f136d421bebfb7'), 'title': '당신도 느리게 나이 들 수 있습니다'}
{'_id': ObjectId('63f72eddb2f136d421bebfb8'), 'title': '아버지의 해방일지'}
{'_id': ObjectId('63f72eddb2f136d421bebfb9'), 'title': '5천만 원으로 시작하는 미라클 기적의 재개발 재건축'}
{'_id': ObjectId('63f72eddb2f136d421bebfba'), 'title': '생에 감사해'}
{'_id': ObjectId('63f72eddb2f136d421bebfbb'), 'title': 'ETS 토익 정기시험 기출문제집 1000 Vol.3 READING 리딩 '}
{'_id': ObjectId('63f72eddb2f136d421bebfbc'), 'title': 'Go Go 카카오프렌즈 27 스위스'}
{'_id': ObjectId('63f72eddb2f136d421bebfbd'), 'title': '오늘 밤, 세계에서 이 사랑이 사라진다 해도'}
{'_id': ObjectId('63f72eddb2f136d421bebfbe'), 'title': 'ETS 토익 정기시험 기출문제집 1000 Vol.3 LISTENING 리스닝 '}
{'_id': ObjectId('63f72eddb2f136d421bebfbf'), 'title': '그리스 로마 신화 32'}
{'_id': ObjectId('63f72eddb2f136d421bebfc0'), 'title': '이은경쌤의 초등어휘일력 365 '}
{'_id': ObjectId('63f72eddb2f136d421bebfc1'), 'title': '물고기는 존재하지 않는다'}
{'_id': ObjectId('63f72eddb2f136d421bebfc2'), 'title': '부자 아빠 가난한 아빠 20주년 특별 기념판'}
{'_id': ObjectId('63f72eddb2f136d421bebfc3'), 'title': '구의 증명'}
{'_id': ObjectId('63f72eddb2f136d421bebfc4'), 'title': '시간이 조금 걸리더라도 '}
{'_id': ObjectId('63f72eddb2f136d421bebfc5'), 'title': '2023 이유진 국어 필사즉생 모의고사 백일기도 3 - 실전유형'}
{'_id': ObjectId('63f72eddb2f136d421bebfc6'), 'title': '기분이 태도가 되지 말자'}
{'_id': ObjectId('63f72eddb2f136d421bebfc7'), 'title': '내가 죽기로 결심한 것은 4 '}
{'_id': ObjectId('63f72eddb2f136d421bebfc8'), 'title': '내가 죽기로 결심한 것은 3 '}
{'_id': ObjectId('63f72eddb2f136d421bebfc9'), 'title': '우리는 모두 죽는다는 것을 기억하라'}
{'_id': ObjectId('63f72eddb2f136d421bebfca'), 'title': '미스터 프레지던트'}
{'_id': ObjectId('63f72eddb2f136d421bebfcb'), 'title': '돈의 속성 200쇄 리커버'}
{'_id': ObjectId('63f72eddb2f136d421bebfcc'), 'title': '2023 큰별쌤 최태성의 별별한국사 한국사능력검정시험 심화(1,2,3급) 상'}
{'_id': ObjectId('63f72eddb2f136d421bebfcd'), 'title': '슬램덩크 신장재편판 1'}
{'_id': ObjectId('63f72eddb2f136d421bebfce'), 'title': '돈의 규칙'}
{'_id': ObjectId('63f72eddb2f136d421bebfcf'), 'title': '보이지 않는 곳에서 애쓰고 있는 너에게'}
{'_id': ObjectId('63f72edeb2f136d421bebfd0'), 'title': '건강과 다이어트를 동시에 잡는 7대 3의 법칙 채소·과일식'}
(+) 파이썬 주석
* 한 줄 주석 : (# 주석)
* 여러줄 주석 : 따옴표 연속3개 (""" 주석 """ / ''' 주석 '''')
# 한 줄 짜리 주석입니다.
"""
여러줄에 걸쳐 있는
주석을 표현할 때 사용합니다
(큰따옴표 ver.)
"""
'''
여러줄에 걸쳐 있는
주석을 표현할 때 사용합니다
(작은따옴표 ver.)
'''
(+) macOS 파이썬 터미널 오류 해결 (맥은 안 알려주는 1:8 코딩강의 ㅠㅠ)
파이썬 + vscode 파이썬 익스텐션까지 전부 설치 완료 했을 때 code=127 오류가 떴는데 이틀째 해결이 안돼서 완전 애먹었다.
하루종일 구글링 뒤져서 이거저거 다 시도해본 결과 한 블로그 글을 보고 출력 문제는 해결됐다. (감사합니다 넙죽)
멘토님께 먼저 여쭤봤는데도 멘토님 답변이 도움이 안됐다. 이게 온라인 강의의 단점인가 싶고... 약간 답답하고 슬펐다
1-1. 파이썬 버전 확인 (터미널에서 python --version 입력)
1-2. 파이썬 경로 확인 (터미널에서 which python3 입력)
2. vscode 설정 > default interpreter path 입력 > 하단 경로를 1-2에서 찾은 python3 설치 경로로 변경
3. vscode 설정 > code runner 입력 > Excutor Map 하단에 setting.json 클릭
4. cmd + F (= ctrl+F) 통해서 'python' 검색 후
"python" == "python -u" 부분을 찾아서 "python" == "python3"으로 수정 후 저장
아무튼 이런 식으로 수정해주니까 출력 안 되던 code=127 오류는 잡았다!
터미널에서 python3 을 못찾는 것 같아서 이것도 이러저런 방법 시도 중에 어찌저찌 반쯤은 해결 됐다.
thank yoru for References 🙏
https://blog.naver.com/maximum_effort11/222941772169
https://velog.io/@0617kim/맥에서-가상환경-설치
https://zzang9ha.tistory.com/361
👩🏻💻 3주차 학습 후기
드디어(?) 백엔드 분야를 처음 배웠다! 너어어어어어어무 힘들었다. 일단 강의 자체가 윈도우 프로세스를 기반으로 하기 때문에 맥OS 유저에게 설치 혹은 간단한 오류에 대해서 일절 언급을 안 해주셔서 (단순 ctrl -> cmd 언급 정도) 설치 후에 반복되는 오류 잡기 위해서 멘토 선생님께 따로 질문하고 (but 해결안됨...두 번째 질문부터는 답변을 안 해주심며칠뒤에 뒤늦게 답변 해주셨지만 도움되는 답변은 아니었다. 1:1 미팅을 신청해보라고 하셨다!) 계속 기다릴 수는 없을 것 같아 구글링으로 온갖 블로그 + 영어 문서를 탐방해서 이것저것 시도해본 뒤에 Code=127 오류를 해결했다. 터미널 실행 돌리면 출력은 되는 상태라 강의도 다시 듣고 따라해봤는데 다행히 실습할 수 있을 정도는 되었다. 출력 탭 말고 터미널 탭에는 아직도 [ bash: alias: python: not found bash: alias: =: not found bash: alias: python3: not found ] 오류가....... 그래도 실행은 되니까 다행인건가 싶다가도 `chsh -s /bin/zsh` 입력해서 업데이트 하려고 해도 업데이트 자체도 안되는 불상사가 자꾸 일어나서 결국 포기했다. 언젠가 미래의 내가 해결해 주겠지..? 흑흑 🤦♀️ 암튼 이번 주간에는 설치하는게 엄청나게 많았는데 강의가 윈도우 대상인 바람에 혼자 너무 많은 애를 먹었고 설치 관련한 모든 것은 구글과 친절하게 포스팅 해주신 개발 블로그 유저들에게 많은 도움을 받아서 그 분들께 무한한 감사를 드린다. 나도 내 기록을 통해서 언젠가 또 다른 이에게 도움이 되는 날이 왔으면 좋겠다. 파이썬 문법은 대학 교양 수업 이후로 처음인데 어색하지만 반가운 마음도 들었고 MongoDB 데이터 핸들링 하는 작업은 너무 재미있었다! 아직 간단한 작업만 해서 그런 걸수도 있지만 재미라도 있어서 다행이다.
'K-Digital Training > 패스트캠퍼스 1:8 코딩 입문' 카테고리의 다른 글
[패스트 캠퍼스] 코딩 왕초보 웹 개발 강의 : 5주차 학습일지 (0) | 2023.03.03 |
---|---|
[패스트 캠퍼스] 코딩 왕초보 웹 개발 강의 : 4주차 학습일지 (0) | 2023.02.23 |
[패스트 캠퍼스] 코딩 왕초보 웹 개발 강의 : 2주차 학습일지 (0) | 2023.02.13 |
[패스트 캠퍼스] 코딩 왕초보 웹 개발 강의 : 1주차 학습일지 (0) | 2023.02.08 |