웹 개발 3주차 개발일지 (1/3~1/9)
듣기까지 고난했던 3주차...
몽고DB 설치때매 애먹었다..
3주차
Python, 크롤링, mongoDB에 대해서 배웠다.
크롤링 - 파이썬으로 웹에 있는 데이터들을 긁어올 수 있음
mongoDB - 저장 (데이터베이스)
Python 시작하기
파이썬을 설치한다? → 일종의 번역팩을 설치한다고 생각하면 됩니다. 컴퓨터는 101010001 과 같은 언어만 알아듣는다고 했지요? 파이썬 문법으로 된 것을 101010001로 변환해줄 수 있도록, 번역 패키지를 설치하는 것입니다.
파이참에 파일 왜안뜸. 검색해서 New Project… 킴 → 맥린이라 모니터 맨 위에 뜨는지 몰랐음.. idiot
확인할 거 3가지
- 로케이션 pythonprac
- 밑에 로케이션 venv 확인
- 파이참 3.8 버전, 맨 밑에 create a main.py welcome script 체크 해제
Vent library root폴더는 안 보이는 폴더라고 생각하기(건들지 말 것)
실행시킬 때는무조건 마우스오른쪽 클릭하고Run 눌러야 함 → 나는 control+shift+R키 눌러서 함
Python 기초공부
에러 보는 꿀팁💡맨 마지막 줄만 읽기(에러에 대한 설명), 그다음에 하나 더 전거 읽기(에러가 이렇게 났다)
파이썬에서는 문자하고 숫자하고 더하면 에러가 난다
Num = str(2) 문자열로 만들어줌 곧 ‘2’ 랑 같음
a_dict = {'name':'bob','age':27 }
print(a_dict['name'])
a_dict = {'name':'bob','age':27 }
a_dict['height'] = 178
print(a_dict)
def sum(num1,num2):
print('안녕!')
return num1+num2
result = sum(2,3)
print(result)
count = count + 1
Count += 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이라는 변수에 넣는다
# 변수의 이름은 마음대로 지을 수 있음!
자료형
숫자, 문자형
name = 'bob' # 변수에는 문자열이 들어갈 수도 있고,
num = 12 # 숫자가 들어갈 수도 있고,
is_number = True # True 또는 False -> "Boolean"형이 들어갈 수도 있습니다.
리스트 형 (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'
함수
함수의 정의 - 이름 맘대루 정할 수 있음
# 수학 문제에서 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)
조건문
if / else로 구성
def oddeven(num): # oddeven이라는 이름의 함수를 정의한다. num을 변수로 받는다.
if num % 2 == 0: # num을 2로 나눈 나머지가 0이면
return True # True (참)을 반환한다.
else: # 아니면,
return False # False (거짓)을 반환한다.
result = oddeven(20)
-----
def is_adult(age):
if age > 20:
print('성인입니다') # 조건이 참이면 성인입니다를 출력
else:
print('청소년이에요') # 조건이 거짓이면 청소년이에요를 출력
is_adult(30)
반복문
파이썬 패키지 설치하기
가상 환경(virtual environment) = venv
PyCharm > Preference
Project: pythonprac > Python Interpreter에서 플러스 누르기
Requests라고 후 Install Package 누르면 requests를 갖고옴
웹 스크래핑(크롤링)
퍼가요
구글에 python requests 패키지라고 치면 많이 나옴 따라하셈
PyCharm > Preference
Project: pythonprac > Python Interpreter에서 플러스 누르기
Bs4라고 검색 후 Install Package 누름
이미 받아온 걸 가지고 솎아내는게 크롤링이라함
—————————
크롤링 기본 세팅
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이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')
# 코딩 시작
기술적으로 중요한 2가지
- 요청을 하는 거 (코드단에서 브라우저를 켜지 않고.) - requests로 함
- 요청돼서 가지고 온 html들 중에 내가 원하는 정보를 잘 솎아내는 거 - beautifulsoup
print(title.text) - 텍스트 가져올 때
print(title['href']) - 태그의 속성 가져올때
- 원하는 부분에서 마우스 오른쪽 클릭 → 검사
- 원하는 태그에서 마우스 오른쪽 클릭
- Copy → Copy selector로 선택자를 복사할 수 있음
웹 스크래핑(크롤링)연습
mongoDB라는 프로그램은 눈으로 보이지 않음.
유식한 말로, 그래픽인터페이스(=GUI)를 제공하지 않는다고 표현함
Robo 3T는 MongoDB의 데이터를 보려고 쓰는 거다
데이터베이스를 쓰는 이유 - 데이터를 잘 갖다 쓰려고
SQL 엑셀에 조금 더 가깝다 (MySQL), 열과 행을 미리 정해놔야 한다, 중간에 바꾸기가 불편함 but 정형화된 데이터를 뽑아가는 방식은 최적화가 많이 되어짐. 데이터가 일관적.
NoSQL - not only SQL의 약자 (mongoDB)
한줄한줄이 딕셔너리 형태로 들어감
pymongo로 DB 조작하기
파이몽고 기본 코드
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
# 코딩 시작
- Insert 넣는 거
- Find 찾는 거
- Update
- Delete
mongoDB는 그냥 딕셔너리가 쌓이는 거
db.users.insert_one(doc) - db안에 users라는 collection 안에 insert 해라
same_ages = list(db.users.find({'age':21}, {'_id':False})) - id는 나타내지 말아라
print(same_ages)
same_ages = list(db.users.find({})) - 조건 없이 모든 document를 find 해라 (빈 중괄호)
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
19살로 바꿔라
update_many - name이 bobby인 애를 모두 찾아서 age 19로 바꿔라
웹 스크래핑결과 저장하기
웹 스크래핑결과 이용하기
1~50위의 곡 스크래핑
파이썬 공백 제거 - .strip()
파이썬 문자열 자르기 - [0:5]