웹 개발 일지_mongoDB

윤승환·2022년 1월 27일
0

Sparta_WEB

목록 보기
3/5

준비

  • python 설치하기
  • mongoDB 설치하기
  1. brew 설치

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  2. mongoDB 설치

    brew tap mongodb/brew

    brew install mongodb-community

    brew services start mongodb-community

  3. mongoDB 실행

    brew services start mongodb-community
    성공시 아래와 같은 Port로 연결된다.

  4. mongo DB 중지

    brew services stop mongodb-community


파이썬 패키지 설치하기

  • 패키지?Library란?
    Python에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위이다.
    이런 패키지의 묶음을 Library라고 하며 외부 Library를 사용하기 위해서 패키지를 설치해야 한다.

  • venv(가상환경)이란?

    프로젝트마다 Library가 다를 수도 있고, 버전이 다를 수도 있으므로 패키지를 담아놓는 가상의 공간.

웹 크롤링 기초

  • 크롤링 : 검색엔진이 내 사이트를 퍼가는 행위
  • 스크랩핑 : 다른 사이트의 데이터를 퍼오는 행위
  1. 코드단에서 요청하는 것 - requests
  2. 요청되어서 가져온 html중 내가 원하는 정보를 가져오는 것 - bs4

API를 가져오기
requests

  • 사용법
import requests #requests 라이브러리 필요
r = requests.get('URL')
rjson = r.json()
print(rjson)

크롤링에 필요한 패키지
bs4 (beautiful soup4)

  • 기본세팅
import requests
from bs4 import BeautifulSoup
# 코드단에서의 요청을 막아둔 사이트를 우회하려고 headers사용.
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)
# 걸러내기 쉬운 bs형식으로 return
soup = BeautifulSoup(data.text, 'html.parser')
  • select_one()
    다음과 같이 찾고자하는 element에 '검사'를 시행하여 정보를 가져온다.

    title = soup.select_one(#old_content > table > tbody > tr:nth-child(2) > td.title > div > a)
    print(title.text) #tag의 text를 가져옴
    print(title['href']) #tag의 속성을 가져옴

  • select()
    다음과 같이 찾고자하는 element를 비교한다.

#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
코드가 서로 다르므로 전체를 가져오려면
#old_content > table > tbody > tr 을 활용

#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a

trs = soup.select('#old_content > table > tbody > tr') # 결과가 list로 반환된다.
for tr in trs:
    title_tag = tr.select_one('td.title>div>a')
    if(title_tag):
        print(title_tag.text)

DB개괄

  • SQL vs No(Not only)SQL
  • RDBMS(SQL)
    행/열의 생김새가 정해진 Excel과 유사하다.
    데이터가 정형화되어 있는 만큼, 데이터의 일관성/분석에 용이함.
    (정형화되어 있는 구조이므로 중간에 행을 추가한다던지.. 구조를 바꾸는 것은
    비효율적)
    ex) MS-SQL, My-SQL
  • No-SQL
    딕셔너리 형태로 데이터를 저장한다.
    데이터마다 정형화된 값을 가질 필요가 없다.
    (형식이 자유로운 만큼, 일관성/분석등에 용이하지 않음)
    ex) MongoDB

mongoDB

  • localhost:27017로 실행 여부 확인
  • Robo3T 로 DB interface를 확인 가능

python으로 mongoDB조작하기

  • pymongo라는 패키지를 사용한다.
  • 기본 형식
    from pymongo import MongoClient
    client = MongoClient('localhost', 27017)
    db = client.practice #사용할 DB_name .. 없으면 create
    # 코딩 시작
db.저장소명.insert/find/update/delete
  • insert

    #저장
    doc = {'name':'yoon','age':25}
    db.users.insert_one(doc)
    같은 데이터를 넣어도 hash?값이 다르기 때문에 다른 객체로 판단한다.

  • find

    #한 개 찾기
    user = db.users.find_one({'name':'yoon'})
    동명이인(같은Key)일 경우 가장 앞에 저장되어 있는 것을 반환

    #여러개 찾기(_id값은 제외하고 출력)
    users = list(db.users.find({'name':'bobby'},{'_id':False}))
    for i in users: print(i)

    #저장되어 있는 것 모두 확인하기
    users = list(db.users.find({},{'_id':False}))
    for i in users: print(i)

  • update

    #한 개 수정
    db.users.update_one({'name':'yoon'},{'$set':{'age':19}})
    해당 Key로 찾은 가장 앞에 있는 것을 수정

    #여러개 수정
    db.users.update_many({'name':'yoon'},{'$set':{'age':19}})

  • delete(DB에서 삭제는 잘 일어나지 않는다.)

    #한 개 삭제
    db.users.delete_one({'name':'yoon'})

    #여러개 삭제
    db.users.delete_many({'name':'yoon'})

0개의 댓글