웹개발 종합반 3주차 내용

최재홍·2023년 3월 22일
0

별점에 해당하는 데이터가 숫자 데이터일 때 별점수만큼 별 글자 반복하기

<script>
  let star_image = "⭐".repeat(star);
  //star은 별점수
</script>

파이썬에서 원하는 라이브러리 설치법

<터미널>
pip install 라이브러리 이름

파이썬 기초문법

<변수선언>
a = 3
b = 4

<함수선언>
def f(x) :
  return 2 * x + 3
  
def hey() :
  print('헤이')
  
#파이썬에서는 함수 생성시, 함수 내용부분을 들여쓰는 것이 중요!

<조건문>
if age > 20:
  print('성인입니다.')
else:
  print('청소년입니다.')
  
<반복문>
fruits = ['사과', '배', '감', '귤']

for fruit in fruits:
  print(fruit)

파이썬 패키지 설치하기

프로젝트마다 다른 패키지를 활용하게 되는데 따라서 프로젝트별로 서로 다른 패키지를 담을 공간이 필요해지게 된다. 그게 가상환경(virtual environment)이다.
가상환경은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행환경이다.

먼저 프로젝트 폴더를 vscode로 열었는지를 확인하고, 터미널을 열어서 "python3 -m venv venv"를 누르고 엔터

python3 -m venv venv

그리고 가상환경을 만드는 것 뿐만 아니라 활성화 시키는 작업까지도 해야한다.
터미널환경에서 프로젝트 폴더가 마지막 경로인지 확인하고 코드를 입력해준다.

source venv/bin/activate

터미널에 (venv)라고 뜨게 된다면 가상환경이 활성화 된 것.


Request 라이브러리 사용해보기

아래 방법으로 서울시 대기 OpenAPI를 활용할 수 있다.

  • 모든 구의 IDEX_MVL 값을 찍어주기
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)

웹스크래핑(크롤링)

먼저 크롤링을 위해서는 'BeautifulSoup'라는 패키지가 설치되어 있어야 한다.

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')

로 적용까지 완료되었다.


네이버 영화페이지에서 원하는 정보 크롤링하기 위해서 각각의 항목들이 어떤 단위로 분류되어 있는지 개발자 모두에서 확인

<tr>태그가 계속해서 반복되고 있는 것을 발견


알아보고자 하는 태그를 'selector 복사'
복사한 것을 붙여넣기 해보면

#old_content > table > tbody > tr:nth-child(3)
#old_content > table > tbody > tr:nth-child(4)
#old_content > table > tbody > tr:nth-child(5)
.
.
.

이런 구조로 반복되는 것을 알 수 있다.

trs = soup.select('#old_content > table > tbody > tr')

print(trs)

로 확인을 해보면 무수한 태그들이 포함되어있는 것을 볼 수 있고

for tr in trs:
  print(tr)

로 확인해보면 tr들 중에 개별적인 tr들을 나눠서 print하는 것을 관찰 할 수 있다.
우리가 크롤링하고 싶은 것은 영화의 순위, 평점, 제목이므로 각각에 해당하는 부분을 우클릭으로 경로를 확인하면

>순위
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
>평점
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(5)
>제목
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a

tr까지의 경로는 반복되고 있으므로 최종적인 코드는 다음과 같이 된다.

trs = soup.select('#old_content > table > tbody > tr')

for tr in trs:
  title = tr.select_one('td.title > div > a').text
  rank = tr.select_one('td:nth-child(1) > img')['alt']
  star = tr.select_one('td.point').text
  
  print(rank, star, title)

해당 태그에 들어가는 내용을 호출하기 위해서는 '.text'까지를 불러야 한다.
이렇게까지 하고 함수를 실행시키면

>
01 9.64 밥정
02 9.59 그린 북
03 9.59 가버나움
04 9.53 디지몬 어드벤처 라스트 에볼루션 : 인연
05 9.52 원더
06 9.52 베일리 어게인
07 9.52 먼 훗날 우리
08 9.51 아일라
09 9.49 당갈
010 9.48 극장판 바이올렛 에버가든
.
.
.

터미널에서 상기와 같은 결과를 알 수 있게 된다.


mongoDB

from pymongo import MongoClient

로 import하는 것이 먼저

client = MongoClient(
    'mongodb+srv://사용자 이름:패스워드@cluster0.iqtkosf.mongodb.net/?retryWrites=true&w=majority')

db = client.클러스터이름

클러스터 URL을 복사해서 붙여넣기 한다.


mongoDB 코드 모음집

# 저장 - 예시
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'})

0개의 댓글