웹개발 3주차

yurimLee·2023년 2월 10일
0

1. 파이썬 설치

컴퓨터가 파이썬을 알아들을 수 있도록 번역 패키지를 설치하는 것
파이썬 문법 → 2진법 (전기 신호)

2. 파이썬 기초 공부

변수

  • 정수
a = 2
b = 3
print(a+b)
5
  • 문자열
a = '대한'
b = '민국'
print(a+b)
대한민국

리스트

a = ['사과', '배', '감']
print(a[0])

딕셔너리

a = {'name':'영수', 'age':24}
print(a['name'])
영수

함수

def sum(a, b, c):
    return a+b+c # 함수의 결과 값을 반환한다.

result = sum(1, 2, 3) # 6
print(result)
6

조건문

age = 25

if age > 20:
	print('성인입니다')
else
	print('청소년입니다')

반복문

ages = [5, 10, 13, 23, 25, 9]

for a in ages:
	print(a)
5
10
13
23
25
9

반복문 + 조건문

ages = [5, 10, 13, 23, 25, 9]

for age in ages:
	if age > 20:
		print('성인입니다')
	else
		print('청소년입니다')

3. 파이썬 패키지 설치하기

작업 환경 만들기

VS Code > 확장 프로그램 > python 설치
VS Code > 터미널 > 새 터미널 > 설정 > 기본 프로필 선택 > Git Bash > 터미널 휴지통 > 새 터미널

가상 환경 venv

가상 환경: 라이브러리를 담아두는 폴더
개인과 회사 프로젝트별로 라이브러리를 담아두는 폴더가 따로 있으면 관리가 편하다
물론 폴더가 중복되긴 하지만 이렇게 관리하면 업그레이드나 다운그레이드하기 편한다.
라이브러리를 venv 폴더에다가 깔아서 해당 라이브러리를 venv에서 가져온다.
※ VS Code를 실행시킬 때 venv가 활성화된 상태인지 확인해야 한다.

$ python -m venv venv
  • venv 폴더 확인
  • 오른쪽 아래 파이썬 버전 클릭 > 작업영역 venv 인터프린터 선택
  • x 클릭 > 새 터미널 > (venv) 잡힌 것 확인

requset 패키지 설치

pip(python install package) 사용
가상환경이 활성화된 상태에서 외부 라이브러리를 설치한다.

pip install requset

4. 패키지 사용하기

request 라이브러리는 fetch의 역할과 똑같다
라이브러리를 사용하기 위해선 패키치 설치 과정이 필요하다

설치가 끝났다면 request 라이브러리를 사용해보자
request라고 하는 라이브러리를 만든 사람의 document를 가보면 어떻게 써야 하는지 알려준다.
구글에 request python docs (영어 버전) https://requests.readthedocs.io/en/latest/ 또는 request python 사용법 (한글 버전)이라고 쳐서 필요한 자료를 얻는다

import requests # 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)

5. 웹 스크래핑(크롤링)

크롤링이란 웹에 접속해서 데이터를 솎아내어 가지고 오는 것이다.
그럴려면 라이브러리가 2개 필요함
request 웹에 접속, bs4(BeautifulSoup) 데이터를 솎아냄

라이브러리 다운로드

pip install bs4

크롤링 기본 세팅

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.naver?sel=pnt&date=20210829',headers=headers)

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

# 코딩 시작
  • 크롤링 연습
    웹 - 검사(개발자 모드) - copy - copy selector
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.naver?sel=pnt&date=20210829',headers=headers)

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

# 전체 html 가져오는 것을 확인할 수 있다.
print(soup)

a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')

# 지정된 html 부분만 가져오는 것을 확인할 수 있다. (솎아냄)
print(a)

# 속성 값 가져오기(bs4 - 꺽새)
print(a['href'])

#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
trs = soup.select('#old_content > table > tbody > tr') # tr 공통 -> tr들이 리스트로 쌓인다.
for tr in trs:
    #old_content > table > tbody > tr:nth-child(2) > td.title > div > a
    a = tr.select_one('td.title > div > a') # 영화 제목
    print(a)

    # 구분선이 None으로 표시됨을 방지
    if a is not None:
        print(a.text)

6. 웹 스크래핑(크롤링) 연습

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.naver?sel=pnt&date=20210829',headers=headers)

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

trs = soup.select('#old_content > table > tbody > tr') # 영화 리스트 공통 부분
for tr in trs:
    #old_content > table > tbody > tr:nth-child(3) > td.title > div > a
    a = tr.select_one('td.title > div > a') # 영화 제목

    # 구분선 None 제거
    if a is not None:
        title = a.text # 영화 제목
        # print(title)
        
        #old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
        rank = tr.select_one('td:nth-child(1) > img')['alt'] # 랭킹 이미지[순위]
        # print(rank)

        #old_content > table > tbody > tr:nth-child(2) > td.point
        star = tr.select_one('td.point').text # 영화 평점
        # print(star)

        print(rank, title, star)

7. 데이터베이스

파워포인트, 엑셀, 워드와 같이 데이터를 쌓고 가져올 수 있게 하는 프로그램이다.
내 컴퓨터에 데이터베이스를 설치할 수 있다
요새는 클라우드 환경(인터넷 상의 컴퓨터)에서 운영되고 있는 데이터베이스를 빌려와서 사용한다
그래서 최신 클라우드 서비스인 MongoDB Atlas를 사용해서 클라우드 데이터베이스를 만들어 볼 것이다.

종류

  • SQL
    엑셀처럼 데이터를 넣을 수 있는 칸이 존재한다
    비즈니스가 잘 안 바뀌는 곳에서 사용한다

  • No SQL(Not Only SQL: SQL 뿐만 아니다)
    정형화된 틀이 존재하지 않고 데이터를 내 마음대로 저장할 수 있다
    비즈니스 유연성을 크게 담보한다

8. mongoDB 연결하기

파이썬(내 컴퓨터)과 mongoDB(클라우드)를 연결
내 컴퓨터에서 데이터를 mongoDB에 쏴주고 가지고 온다 (내 컴퓨터에서 mongoDB를 조작)
mongoDB를 조작하려면 두 개의 라이브러리가 필요

라이브러리 다운로드

pip install dnspython
pip install pymongo

pymongo 기본 코드

from pymongo import MongoClient
client = MongoClient('여기에 mongoDB URL 입력')
db = client.dbsparta

mongoDB URL 가져오기

deployment > database > connect > connect your application > driver: python > version: 3.6 or later

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:<password>@cluster0.mmgalfj.mongodb.net/?retryWrites=true&w=majority') # 라이브러리 부르기
db = client.dbsparta

9. DB 조작하기

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.mmgalfj.mongodb.net/?retryWrites=true&w=majority') # 라이브러리 부르기
db = client.dbsparta


# insert 한 개 입력
doc = {'name':'영수','age':24} # 몽고DB는 딕셔너리를 넣어주면 된다 
doc = {'name':'철수','age':20}
doc = {'name':'영희','age':30}
db.users.insert_one(doc) # 'users' 라는 명칭의 collection이다.


# select 전체 조회 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({}, {'_id': False})) # {} 조건 없음, {'_id': False} '_id' 값 제거
for i in all_users:
    print(i)

    
# select 한 개 조회 ( _id 값은 제외하고 출력)
user = db.users.find_one({}, {'_id': False})
user = db.users.find_one({'name':'철수'})
print(user)


# update 한 개 갱신
db.users.update_one({'name':'영수'},{'$set':{'age':19}}) # name이 영수인 것을 찾아서 age을 19로 바꿔라


# delete 한 개 삭제
db.users.delete_one({'name':'영수'})
  • Collection
    큰 데이터베이스 안에 막 때려 넣으면 뭐가 뭔지 모르니까 묶어놓은 소그릅 단위이다

10. 웹 스크래핑 결과 저장하기

# mongoDB 연결
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.mmgalfj.mongodb.net/?retryWrites=true&w=majority') # 라이브러리 부르기
db = client.dbsparta


# 웹 크롤링에 필요한 라이브러리
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')


trs = soup.select('#old_content > table > tbody > tr') # 영화 리스트 공통 부분
for tr in trs:
    #old_content > table > tbody > tr:nth-child(3) > td.title > div > a
    a = tr.select_one('td.title > div > a') # 영화 제목

    # 구분선 None 제거
    if a is not None:
        title = a.text # 영화 제목
        # print(title)
        
        #old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
        rank = tr.select_one('td:nth-child(1) > img')['alt'] # 랭킹 이미지[순위]
        # print(rank)

        #old_content > table > tbody > tr:nth-child(2) > td.point
        star = tr.select_one('td.point').text # 영화 평점
        # print(star)

        # print(rank, title, star)

        doc = {'title':title, 'rank':rank, 'star':star}
        db.movies.insert_one(doc)

0개의 댓글