일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JS 데이터타입
- JS classList
- js 변수
- JS prompt
- JS setTimeout
- JS append
- JS value속성
- JS setInterval
- CSS기초
- JS typeof연산자
- JS form action
- CSS속성정리
- JS 타이머기능
- JS appendChild
- JS 스코프
- JS 함수
- JS 화살표함수
- JS 삼항연산
- JS null undefined
- JS redirection
- JS 숫자
- HTML기초
- JS clearInterval
- git 협업셋팅
- JS 기초
- JS preventDefault
- JS 형변환
- JS localStorage
- JS form
- JS 연산
공부기록용
웹개발 종합반 3주차_01 본문
Python
터미널
- 터미널이 뭔가요?
사용자가 텍스트로 명령어를 입력하면, 결과를 텍스트로 화면에 출력해주는 도구
- Q. 터미널은 어디에 사용하나요?
파이썬 라이브러리를 설치하고, 파이썬 프로젝트를 실행하는데 사용
- Q. 왜 사용하나요?
명령어를 적어 작동시키는 것이 빠르고 편리하기 때문, 요새는 GUI(눈에 보이는 아이콘으로 상호작용하는 방식)이 잘 되어 있어 사용하는 경우가 줄어들고 있지만, 코딩할 때는 명령어를 입력하는 방식을 자주 접하게 될 것이다.
Python
# 숫자
a = 2
b = 3
print(a+b)
# 리스트
c = ['사과', '배', '감']
print(c[0])
# 딕셔너리
a = {'name':'영수', 'age':24}
print(a['name'])
함수
def로 선언해주고 :를 하면 그 밑에 자동으로 간격이 벌어짐 = 내용이라고 자동으로 인식된다.(Javascript는 { } 사이에 내용이었음)
# 수학문제에서
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 hey(): # --->함수의 내용물이다
print("헤이") # ---->(내용물)
hey() # ---->헤이! 로 출력
def sum(a,b,c): # ---->합계의 값이
return a+b+c # ---->a,b,c가 1,2,3으로 변해서/return이 있으면 이 함수sum(1,2,3)를 그 값으로 변신시킨다
result = sum(1,2,3) # ---->sum함수를 부르면
print(result) # ---->6 출력된다
조건문
age = 25
if age > 20:
print('성인입니다')
else:
print('청소년입니다')
# ----->출력값은 성인입니다
반복문
ages = [5,10,13,23,25,9] # ------>이런 age리스트가 있는데
for a in ages: # -----> ages의 하나하나씩의 값을 가져와서 a로 넣고 그 a를 밑에서 가져다 쓰자
print (a) # ----->출력값은 5 10 13 23 25 9
반복문+조건문
ages = [5,10,13,23,25,9]
for a in ages:
if a > 20:
print('성인입니다')
else:
print('청소년입니다')
# age를 한번씩 돌면서 조건에 맞는지 안맞는지 돌아서 값을 출력
가상환경 venv - 패키지를 담아두는 공구함
회사에서는 패키지 A, B, C를 설치해서 쓰고, 개인 프로젝트에서는 패키지 B, C, D, E를 설치해서 쓰고 있었어요. 그런데 회사팀장님이 B를 이전 버전인 B' 로 쓰자고 하시네요. 그렇게 되면, 같은 컴퓨터에 깔려 있는 개인 프로젝트에서는 B' 로 쓰면 코드를 다 바꿔야 해요. 이때,
다 담아둘 필요 없이 공구함을 2개 만들어서, 공구함1에 A, B', C를 담아두고, 공구함2에 B, C, D, E를 담아두고 쓰면 관리하기 편하겠죠? 그래서, 가상환경이라는 개념이 등장했습니다. 즉, 프로젝트별 공구함이에요.
정리하자면,
가상환경(virtual environment) 은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경 입니다.
venv 생성하기
python -m venv venv
: 가상환경 venv 파일을 만들어준다.
venv 활성화
venv 활성화
: 활성화를 시켜줘야 라이브러리를 컴퓨터가 읽어준다. (오른쪽 하단에 3.8.3보이는거 클릭해서 venv로 바꿔주고 새터미널 실행하면 venv로 바뀐걸 볼 수 있다.)
라이브러리 만들기
pip install 라이브러리이름_requests
: 새로운 프로젝트의 라이브러리를 가상환경(공구함)에 설치, 가상환경_venv이 활성화된 상태에서 설치해주기
Requests 라이브러리 사용
requsets 웹에 접속하는 라이브러리
Requests 라이브러리는 fetch처럼 서버에서 데이터를 가져와서 볼 때 사용한다. 이런 기능을 사용하기 위해서 requests라이브러리가 필요한 것이다.(pip install requests) Requests라이브러리 docs
# requests 써보기
import requests # requests 라이브러리 설치 필요
# 기재된 url = 즉 데이터를 받아 올 곳
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
print(rjson)
import requests
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
print(rjson['RealtimeCityAir']['row'])
# 해당 url(API)의 RealtimeCityAir와 row를 받아옴
라이브러리(requests)를 이용해서 API의 MSRSTE_NM을 gu_name로, IDEX_MVL를 gu_mise로 설정해서 받아온 걸 print(gu_name,gu_mise)한 것
import requests
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
for a in rows:
gu_name = a['MSRSTE_NM']
gu_mise = a['IDEX_MVL']
print(gu_name,gu_mise)
웹스크래핑(크롤링)
웹에 접속해서 특정 데이터를 솎아내어 가지고 오는 것
pip install bs4
: 가상환경 활성화 해주고(venv) beautifulsoup4 패키지/라이브러 추가 설치하기
- beautifulSoup 데이터를 솎아내는 라이브러리
- requsets 웹에 접속하는 라이브러리
bs4(beautifulsoup4) 사용해보기
# bs4 써보기
import requests
from bs4 import BeautifulSoup
# 해당 url의 정보를 크롤링 해올 것이다.
URL = "https://movie.daum.net/ranking/reservation"
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)
soup = BeautifulSoup(data.text, 'html.parser')
# print(soup)
# 타겟 URL을 읽어서 HTML를 받아오고,
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
import requests
from bs4 import BeautifulSoup
URL = "https://movie.daum.net/ranking/reservation"
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)
soup = BeautifulSoup(data.text, 'html.parser')
# select / select_one사용
title = soup.select_one('#mainContent > div > div.box_ranking > ol > li:nth-child(1) > div > div.thumb_cont > strong > a')
# print(title)
print(title.text)
select / select_one
태그 안의 텍스트를 찍고 싶을 땐 → 태그.text
태그 안의 속성을 찍고 싶을 땐 → 태그['속성']
개발자도구에서 어떤 뼈대를 가져와야 하는지 찾기
원하는 부분에서 마우스 오른쪽 클릭
→ 검사 원하는 태그에서 마우스 오른쪽 클릭 Copy
→ Copy selector로 선택자를 복사할 수 있음
title = soup.select_one("#mainContent > div > div.box_ranking > ol > li:nth-child(1) > div > div.thumb_cont > strong > a").text print(title)
> soup.select_one()으로 셀렉터 값을 넣고 원하는 뼈대만 꺼내기
>> print()로 어떻게 가져와졌는지 확인
>>> 가져온 데이터는 html의 뼈대이기 때문에 .text()를 사용해서 문자 값만 꺼내기
# 선택자를 사용하는 방법 (copy selector) soup.select('태그명') soup.select('.클래스명') soup.select('#아이디명') soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명') # 태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]') # 한 개만 가져오고 싶은 경우 soup.select_one('위와 동일')
import requests
from bs4 import BeautifulSoup
URL = "https://movie.daum.net/ranking/reservation"
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)
soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#mainContent > div > div.box_ranking > ol > li')
# li들을 가져올꺼야
print(lis)
import requests
from bs4 import BeautifulSoup
URL = "https://movie.daum.net/ranking/reservation"
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)
soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#mainContent > div > div.box_ranking > ol > li')
# lis의 li를 돌면서
# title를 가져오는데
# title는 li에서 class가(.) link_txt인 것을 하나가져오는거야
for li in lis:
title = li.select_one('.link_txt')
print(title)
import requests
from bs4 import BeautifulSoup
URL = "https://movie.daum.net/ranking/reservation"
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)
soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#mainContent > div > div.box_ranking > ol > li')
for li in lis:
title = li.select_one('.link_txt').text
# print(title.text)
import requests
from bs4 import BeautifulSoup
URL = "https://movie.daum.net/ranking/reservation"
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)
soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#mainContent > div > div.box_ranking > ol > li')
# 순위(rank), 제목(title), 평점(rate) 가져오기
for li in lis:
rank = li.select_one('.rank_num').text
title = li.select_one('.link_txt').text
rate = li.select_one('.txt_grade').text
print(rank,title,rate)
title = li.select_one(".tit_item").text.strip("\n")
: 제목을 출력했는데 공백이 많다면, strip()을 검색해서 사용, 그래도 많다면, \n을 strip안에 넣어보기
DB
: 잘 쌓는게 아닌 저장해 놓은 데이터를 잘 가져오기 위함
Database에는, 크게 두 가지 종류가 있다.
RDBMS(SQL)
행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사합니다. 데이터 50만 개가 적재된 상태에서, 갑자기 중간에 열을 하나 더하기는 어려울 것입니다. 그러나, 정형화되어 있는 만큼, 데이터의 일관성이나 / 분석에 용이할 수 있습니다.
정형화된 규칙이 있어서 많은 정보를 관리하기에 유용(대기업)
ex) MS-SQL, My-SQL 등
No-SQL(Not only)
딕셔너리 형태로 데이터를 저장해두는 DB입니다. 고로 데이터 하나 하나 마다 같은 값들을 가질 필요가 없게 됩니다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있습니다.
정해진 저장 규칙은 없음(스타트업)
ex) MongoDB
MongoDB
mongoDB 조작 시 필요한 패키지
pymongo설치 : pip install pymongo
dnspython설치 : pip install dnspython
pymongo 기본 코드
from pymongo import MongoClient client = MongoClient('URL 입력') db = client.dbsparta # url이 mongodb주소
> 해당 url을 넣어주면 연결
> url에 <password>는 만들면서 지정한 password 넣어주면
pymongo로 mongoDB 조작해보기
from pymongo import MongoClient client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority') db = client.dbsparta # doc라는 딕셔너리를 하나 만들어보고 doc = { 'name':'영수', 'age':24 } # 데이터 넣기 db.users.insert_one(doc)
> 생성이 잘 된걸 볼 수 있다.
데이터 넣기 (앞전 영수의 데이터 넣고 추가로 넣은 거임)
from pymongo import MongoClient client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority') db = client.dbsparta doc = {'name':'영희','age':30} db.users.insert_one(doc) doc = {'name':'철수','age':20} db.users.insert_one(doc)
pymongo(find)
# 핵심은 db.users.find({},{'_id':False}) all_users = list(db.users.find({},{'_id':False}))
from pymongo import MongoClient client = MongoClient('mongodb+srv://sparta:test@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority') --->이 DB에서 db = client.dbsparta all_users = list(db.users.find({-조건-},{'_id':False})) # db에서 user들을 찾아서,{'_id':False} --> id 안보겠다 for a in all_users: print(a)
pymongo(find_one)
user = db.users.find_one({}) print(user)
from pymongo import MongoClient client = MongoClient('mongodb+srv://test:sparta@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority') db = client.dbsparta user = db.users.find_one({}) print(user)
pymongo(update_one)
db.users.update_one({'name':'영수'},{'$set':{'age':19}}) # mongoDB에서 name이 영수인걸 찾아서 age를 19로 바꿔라
pymongo(delete_one)
# db.users.delete_one({조건}) db.users.delete_one({'name':'영수'})
영수의 정보가 삭제
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'})
총 정리를 해보자!
즉, 웹에 접속해서 원하는 데이터를 크롤링해서 저장하기의 과정이 필요한것, 모두 가상환경으로의 설정 후 진행!!
+웹에 접속을 위해서 reauests 라이브러리가 필요
설치 : pip install requests
import requests
r = requests.get('url')
rjson = r.json()
print(rjson)
+원하는 데이터를 크롤링하기 위해서 bs4(beautifulsoup4) 라이브러리가 필요
설치 : pip install bs4
import requests
from bs4 import BeautifulSoup
URL = "크롤링 할 웹 페이지 url"
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)
soup = BeautifulSoup(data.text, 'html.parser')
+mongoDB에 저장해주기 위해서
pymongo설치 : pip install pymongo
dnspython설치 : pip install dnspython
from pymongo import MongoClient
client = MongoClient('URL 입력')
db = client.dbsparta
# url이 mongodb주소
# client = MongoClient('mongodb+srv://test:<password>@cluster0.ybbyzho.mongodb.net/?retryWrites=true&w=majority')
# <password>자리에는 부여했던 password 넣어주기
> 이게 제일 맨 위에 배치되어야 함
'📚강의록📚 > 스파르타)웹 개발 종합' 카테고리의 다른 글
웹개발 종합반 4주차_01 (0) | 2023.06.05 |
---|---|
웹개발 종합반 3주차_02 (1) | 2023.06.05 |
웹개발 종합반 2주차_02 (0) | 2023.06.01 |
웹개발 종합반 2주차_01 (0) | 2023.06.01 |
웹개발 종합반 1주차 (0) | 2023.05.17 |