웹개발종합반 3주차

jathazp·2022년 1월 3일
0

15

목록 보기
3/14

1.Python 설치

2.MongoDB 설치

2-1 MongoDB 란?

mongoDB는 문서지향(Document-Oriented) 저장소를 제공하는 NoSQL 데이터베이스 시스템

mongoDB에서는 데이터가 Document로 불리며, 이 데이터의 집합을 Collection(RDMS(관계형 DB시스템)-Table)이라고 한다. 스키마 제약 없이 자유롭고, BSON(Binary JSON) 형태로 각 문서가 저장되며 배열(Array)이나 날짜(Date) 등 기존 RDMS에서 지원하지 않던 형태로도 저장할 수 있기 때문에 JOIN이 필요 없이 한 문서에 좀 더 이해하기 쉬운 형태 그대로 정보를 저장할 수 있다는 것이 특징이다.

특히 mongoDB는 문서지향 데이터베이스로, 이것은 객체지향 프로그래밍과 잘 맞고 JSON을 사용할 때 아주 유용

따라서 자바스크립트를 기반으로 하는 Node.js와 호환이 매우 좋기 때문에, Node.js에서 가장 많이 사용되는 데이터베이스입니다.

https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174384/mongodb%EB%9E%80

3.환경변수 설정

3-1. 환경변수 설정 이유

https://velog.io/@psj0810/%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EB%9E%80

4.Robo 3T 설치

4-1. Robo 3T란?

'Robo 3T'는 프로그램은 MongoDB의 유용성을 더해주는 프로그램

Robo 3T 프로그램을 사용하게 되면 MongoDB를 그래픽 유저 인터페이스(GUI) 위에서 편하게 조회할 수 있도록 디자인(?)을 입혀주는 프로그램

mongodb는 눈에 보이지 않게 돌아가는데, robo 3t가 이걸 눈에 보이게끔 해주는것
https://parkjh7764.tistory.com/17

5.Git Bash 설치

6.파이썬

괄호대신 탭으로 구분

선언
a = 2
b = 3

딕셔너리
a={'name':'bob','age':27}

리스트
a_list=['사과','배','감']

함수

def sum(num1,num2):
	return num1+num2

조건문

if age>5:
	print
else:
	print
    
    
ex)

	def is_adult(age):
    	if(age>20):
        	print
        else:
        	print

반복문


fruits=['사과','배','귤',...]

count=0
for i in fruits:
	if i=='수박': 
    	count++

6-2. 파이썬 패키지 설치

패키지?
python에서 패키지는 모듈(일종의 기능 묶음)을 모아놓은 단위.
이런 패키지 묶음을 라이브러리라고 함

가상환경? venv=virtual environment
프로젝트별로 패키지를 담을 공구함
패키지 관리를 위한 것!

ex)
requests 패키치 설치후 사용해보기
settings -> project -> interpreter -> requests 검색 후 설치

requests 패키지 사용법? 구글링
import requests # requests 라이브러리 설치 필요

복습하면서 보니
requests를 통해서 서버에 요청하는데,
이거 html에서 자바스크립트로 api서버에 요청하던거랑 같다.

즉, 프론트에서 서버에 요청도 가능하고 백(파이썬)에서 다른 서버에 요청하는 경우도 가능하다는것

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

print(rjson)

6-2. 크롤링

검색엔진이 내 사이트 퍼가는 행위가 크롤링
사실상 정보 긁어오는건 스크래핑..
근데 그냥 혼용해서 쓴다. 편하게 크롤링이라 하자

순위 정보 가져오기 해보자

크롤링이 가능한 이유?
웹 프론트 html은 이미 받아온 데이터지. 이미 받아온거를 가지고 데이터 뽑아내는게 크롤링. 그냥 긁어오는거야 받아온 데이터

크롤링 핵심
1.요청
코드 단에서 브라우저 키지 않고 요청하는것

2 받아낸 html에서 내가원하는 정보 잘 솎아내는것
=>beautifulsoup의 역할

request 패키지로 api서버에 요청 후 데이터를 받음
그리고 받은 데이터를 bp4 를 통해 솎아냄(데이터 뽑기 쉽도록)

beautiful => select_one(한 개) 과 select(여러 개)의 두 가지 사용방법

select_one

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)

soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a');
/*selector는 해당 페이지에서 검사 누른후 copy selector 통해서 복사해온다. selector 은 즉, 선택자를 의미*/
print(title.text)
print(title['href'])


# 코딩 시작

select

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)

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:
        title = a_tag.text
        rank = tr.select_one('td:nth-child(1) > img')['alt']
        grade = tr.select_one('td.point').text
        print(rank,title,grade)
# 코딩 시작

데이터 베이스란(?)

데이터를 찾기 쉽게 잘 정리해서 쌓아놓은 데이터 창고
RDBMS vs NoSQL

몽고db는 그냥 딕셔너리가 쌓이는것..?

파이썬 MongoDB 조작

pymongo설치

insert

from pymongo import MongoClient
client = MongoClient('localhost', 27017) #내 컴퓨터에서 돌아가는 몽고db접속
db = client.dbsparta #dbsparta라는 db 이름으로 접속

# insert / find / update / delete

doc = {'name':'bobby','age':21}#딕셔너리
db.users.insert_one(doc)#딕셔너리를 db안에 users (콜렉션)에 넣는다. 콜렉션은 비슷한애들끼리 모아놓은것 관계db의 테이블이다.

find

same_ages = list(db.users.find({'age':21},{'_id':False}))
#_id:false 는 id값은 가져오지 말라는 의미

same_ages = list(db.users.find({},{'_id':False}))
#빈 중괄호는 조건없이 전부 다 가져오라는 뜻

user = db.users.find_one({'name':'bobby'},{'_id':False})
#Bobby가 여러개 있어도 한 개만 갖고 온다.

update

db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
#name이 bobby인 애를 바꿔서 age를 19로 바꿔라 users 는 collection이름

delete

db.users.delete_one({'name':'bobby'})

MongoDB 총정리

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
#
# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))
#
# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
#
# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

지니뮤직 크롤링 과제

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient

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://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
    rank_info = tr.select_one('td.number').text
    rank = rank_info.split(' ')[0].strip()
    song = tr.select_one('td.info > a.title.ellipsis').text.strip()
    name = tr.select_one('td.info > a.artist.ellipsis').text;
    print(rank+'    제목:'+song+'     가수:'+name)

# for tr in trs:
#     rank=tr.select_one('td.number')
#     print(rank)

크롤링 하는법
데이터베이스 다루는법

0개의 댓글