💡수업 목표💡
- 파이썬 기초 문법을 안다.
- 원하는 페이지를 크롤링 할 수 있다.
- pymongo를 통해 mongoDB를 제어할 수 있다.
Python 설치
공식 홈페이지에서 Python 설치
웹개발종합반 강의에서는 해당 설치방법을 추천해준다. 프로그래밍이 처음이라면 해당 방법으로 무조건 따라하기를 추천한다.
Homebrew를 통한 Python 설치
아무래도 mac으로 개발을 하는 분들은 대부분 homebrew를 많이 사용할거라고 생각한다. 나 역시도 설치파일보다는 brew를 사용해서 관리하는건이 더 익숙하고 편해서 강의를 따라가지 않았다. 덕분에 M1과 Pycharm은 또 처음이라서 약간 설치하는데 고생을 했다...^^
1. 파이썬 관리하기 위한 오픈소스 pyenv가 설치되어 있지 않다면 brew를 이용해서 pyenv를 설치해준다.
brew install pyenv
2. pyenv를 통해서 설치 가능한 python의 버전 리스트를 확인할수 있다.
#python 설치가능한 버전 리스트 확인가능
pyenv install --list
3. 원하는 python 버전을 선택해서 설치하면 된다.
단, Mac m1을 사용하는 분이시라면 3.9.1 이상 버전부터 설치가 가능합니다. 그 이하 버전을 설치할 시 오류가 날수 있으니 참고 해주세요.
#python 버전을 확인한 후 최신버전으로 설치해준다.
pyenv install 3.10.6
4. 설치한 python 버전이 내 개발환경에서 디폴트로 사용할수 있게 global 설정을 해준다.
#설치한 최신버전을 global하게 설정한다.
pyenv global 3.10.6
5. 그런 다음 디폴트 설정이 올바르게 되었는지 확인해보자.
pyenv version #버전체크
6. 설치가 완료 되었다면 ~/.zshrc에 추가해준다.
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
그런 다음 source ~/.zshrc 명령을 실행하여 쉘 설정을 reload 해주면 .zshrc 에 다음과 같은 코드가 추가되어 있는 것을 확인할 수 있다.
# 위 스크립트를 추가한 바로 다음 줄에 아래 코드가 추가되어 있습니다.
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
7. python 경로와 버전을 확인해볼수 있다.
which python
# /Users/leehyunji/.pyenv/shims/python
python --version
# Python 3.7.3
Python버전 Pycharm에 설정하기
프로젝트 생성화면에서 New enviroment using을 확인한다.
Location은 건들지 않고 Base interpreter에 아까 파이썬이 설치된 위치를 입력해준다.
프로젝트가 생성된 다음
venv > bin 폴더를 확인하면 설치한 Python 버전이 들어가 있는 것을 확인 할수 있다.
아나콘다 Anaconda 를 통한 PyCharm 셋팅
개인적으로 해당 강의수준에서는 아나콘다까지는 필요가 없다. 하지만 M1환경에서 Pycharm 셋팅을 하려다보니 자꾸 아나콘다나 나와서 멋모르고 설치를 했었지만 위의 방법까지만 하는것이 이 강의에서는 딱 좋다.
아나콘다 Anaconda 란?
아나콘다는 패키지 관리와 디플로이를 단순케 할 목적으로 과학 계산을 위해 파이썬과 R 프로그래밍 언어의 자유-오픈 소스 배포판이다. 패키지 버전들은 패키지 관리 시스템 conda를 통해 관리된다.
프로젝트를 진행하다보면 여러 라이브러리, 패키지를 다운로드하여서 사용하게 된다. 그러다 보면 각 라이브러리들끼리 충돌을 일으키는 문제를 발생시키는 경우, 또는 특정 버전과 호환하는 경우가 생겨서 최신 버전과 이전 버전 중 선택해야 하는 상황이 발생하는데 이때 아나콘다를 이용한 가상환경을 통해서 각 프로그램별로 라이브러리 모듈 등의 버전을 별도로 관리할 수 있다.
https://www.anaconda.com/products/distribution
PyCharm에 Anaconda 연결하기
프로젝트 생성화면에서 New enviroment using을 Conda로 변경한다.
Conda executable에 아까 아나콘다가 설치된 위치를 입력해준다.
프로젝트가 생성된 다음
preferences > Proejct : pythonProject > python Inerpreter 에서 conda의 패키지들을 확인할 수 있다.
python이 정상적으로 3.10버전이 들어간것을 볼수 있다
2주차 OpenAPI 복습
http://spartacodingclub.shop/web/movie
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"></script>
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<title>스파르타코딩클럽 | 내 생애 최고의 영화들</title>
<style>
* {
font-family: 'Gowun Dodum', sans-serif;
}
.myTitle {
background-color: darkgreen;
width: 100%;
height: 250px;
color: #fff;
background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url("https://movie-phinf.pstatic.net/20210715_95/1626338192428gTnJl_JPEG/movie_image.jpg");
background-position: center;
background-size: cover;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.myTitle .mybtn {
width: 200px;
height: 50px;
background-color: transparent;
color: #fff;
border-radius: 50px;
border: solid 1px #fff;
margin-top: 10px;
}
.myTitle .mybtn:hover {
border: solid 2px #fff;
}
.wrap {
width: 95%;
max-width: 1200px;
margin: 20px auto 0px;
}
.myPost {
width: 95%;
max-width: 500px;
box-shadow: 0px 0px 3px 0px gray;
padding: 20px;
margin: 20px auto;
display: none;
}
.mybtn {
display: flex;
justify-content: center;
align-items: center;
margin: 10px;
}
.mybtn button {
margin-right: 10px;
}
</style>
<script>
$(document).ready(function () {
listing();
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/web/api/movie",
data: {},
success: function (response) {
console.log(response)
let rows = response['movies'];
for (let i = 0; i < rows.length; i++) {
let comment = rows[i]['comment'];
let desc = rows[i]['desc'];
let image = rows[i]['image'];
let star = rows[i]['star'];
let title = rows[i]['title'];
let star_image = "⭐".repeat(star);
let temp_html = `<div class="col">
<div class="card">
<img src="${image}"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">${title}</h5>
<p class="card-text">${desc}</p>
<p>${star_image}</p>
<p>${comment}</p>
</div>
</div>
</div>`; // ` backtick
$("#cards-box").append(temp_html);
}
}
})
});
function listing() {
console.log("화면 로딩 후 잘 실행되었습니다.");
}
function open_box() {
alert("박스열기");
$("#post-box").show();
}
function close_box() {
alert("박스닫기");
$("#post-box").hide();
}
</script>
</head>
<body>
<div class="myTitle">
<h1>내 생애 최고의 영화들</h1>
<button class="mybtn" onclick="open_box();">영화 기록하기</button>
</div>
<div class="myPost" id="post-box">
<div class="form-floating mb-3">
<input type="text" class="form-control" id="url" placeholder="name@example.com">
<label for="url">영화URL</label>
</div>
<div class="input-group mb-3">
<label class="input-group-text" for="score">별점</label>
<select class="form-select" id="score">
<option selected>선택하기</option>
<option value="1">⭐</option>
<option value="2">⭐⭐</option>
<option value="3">⭐⭐⭐</option>
<option value="4">⭐⭐⭐⭐</option>
<option value="5">⭐⭐⭐⭐⭐</option>
</select>
</div>
<div class="form-floating">
<textarea class="form-control" placeholder="Leave a comment here" id="comment"></textarea>
<label for="comment">코멘트</label>
</div>
<div class="mybtn">
<button type="button" class="btn btn-dark">기록하기</button>
<button type="button" class="btn btn-outline-dark" onclick="close_box();">닫기</button>
</div>
</div>
<div class="wrap">
<div id='cards-box' class="row row-cols-1 row-cols-md-4 g-4">
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">This is a longer card with supporting text below as a natural lead-in to
additional content. This content is a little bit longer.</p>
<p>⭐⭐⭐</p>
<p>여기 코멘트가 들어갑니다</p>
</div>
</div>
</div>
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">This is a longer card with supporting text below as a natural lead-in to
additional content. This content is a little bit longer.</p>
<p>⭐⭐⭐</p>
<p>여기 코멘트가 들어갑니다</p>
</div>
</div>
</div>
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">This is a longer card with supporting text below as a natural lead-in to
additional content.</p>
<p>⭐⭐⭐</p>
<p>여기 코멘트가 들어갑니다</p>
</div>
</div>
</div>
<div class="col">
<div class="card">
<img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Card title</h5>
<p class="card-text">This is a longer card with supporting text below as a natural lead-in to
additional content. This content is a little bit longer.</p>
<p>⭐⭐⭐</p>
<p>여기 코멘트가 들어갑니다</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
파이썬 시작하기
파이썬 기본 파일확장자는 .py이다.
.py파일을 생성하고 정상적으로 파이썬이 돌아가는 printf()를 통해서 테스트해보자
초록색 RUN 화살표를 누르고 아래 콘솔에 정상적으로 출력되면 파이썬 개발을 위한 환경이 무사히 적용되었음을 확인 할수 있다.
파이썬 기초문법
변수 & 기본연산
a = 2
b = 3
print(a+b)
리스트
a_list= ['사과', '배','감']
a_list.append('수박')
print(a_list)
딕셔너리
a_dict={
'name' : 'bob',
'age' : 27
}
print(a_dict['name'])
함수
def sum(a,b):
print("더하자!")
return a+b
result = sum(1,2)
print(result)
조건문
def is_adult(age):
if age > 20:
print('성인입니다.')
else:
print("청소년입니다.")
is_adult(25)
is_adult(15)
반복문
# 리스트 반복문
fruits = ['사과','배','감','귤']
for fruit in fruits:
print(fruit)
# 딕셔너리 반복문
people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]
for person in people :
if person['age'] > 20:
print(person['name'])
패키지 사용해보기 - Requests 라이브러리
패키지? 라이브러리?
→ Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위. 이런 패키지 의 묶음을 라이브러리 라고 볼 수 있습니다. 지금 여기서는 외부 라이브러리를 사용하기 위해서 패키지를 설치합니다.
→ 즉, 여기서는 패키지 설치 = 외부 라이브러리 설치!
가상 환경(virtual environment) 이란?
→ 프로젝트별로 패키지들을 담을 공구함.
→ 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경.
Preferences > Project : pythonPrac > Python Interpereter를 보면 해당 프로젝트에서 현재 사용중인 패키지 리스트들을 확인할수 있다.
이번에 사용해볼 reqests 패키지를 설치한다.
requests 패키지 기본 사용법
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
example - 미세먼지 openAPI 사용해보기
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
for row in rows:
gu_name = row['MSRSTE_NM']
gu_mise = row['IDEX_MVL']
if gu_mise < 60:
print(gu_name)
웹 스크래핑(크롤링) 기초 - beautifulsoup4 라이브러리
bs4(beautifulsoup4) 패키지 설치
파이썬에서는 beautifulsoup4 라이브러리를 통해서 웹 스크랩핑이 가능하다.
크롤링 기본 셋팅
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')
print(soup)
example - 네이버영화 랭킹 타이틀 평점 크롤링하기
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')
movies = soup.select("#old_content > table > tbody > tr")
for movie in movies:
a = movie.select_one("td.title > div > a")
if a is not None :
title = a.text
rank = movie.select_one("td:nth-child(1) > img")["alt"]
star = movie.select_one("td.point").text
print(rank, title, star)
DB (Database)
데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다.
이때 데이터는 단순 날 것의 infomation아닌 의미 있고 쓸모 있는 내용으로 가공하여 체계적으로 조직한 Data를 의미한다.
DBMS(Database Management System)
데이터베이스 관리 시스템은 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어 도구의 집합이다.
데이터베이스는 여러사람이 공유하고 사용할 목적으로 가공한 데이터인 만큼 이러한 데이터의 중복을 없애고 구조화하여 효과적으로 처리할 수 있는 시스템이 필요하다. DBMS은 사용자 또는 다른 프로그램의 사이에 위하여 질의를 처리하고 적절히 응답하여 데이터를 사용할 수 있는 환경을 제공한다.
DBMS의 분류 : SQL VS No-SQL
DBMS의 분류은 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Object-Relational) 등으로 분류가 있으나 크게 두가지로 생각하면된다.
- SQL(RDBMS) 데이터베이스
- No-SQL 데이터베이스
SQL (RDBMS, Relational Database Management System)
SQL은 Structured Query Language (구조적 질의 언어)의 줄임말로, 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어이다.
RDBMS의 데이터베이스는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있어서 아마 가장 많이 경험한 익숙한 형태의 데이터베이스 일것이다.
- MySQL, Oracle, SQLite, MariaDB, PostgresSQL 등...
No-SQL
NoSQL 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다.
즉 스키마도, 관계도 없는 딕셔너리 형태라고 보면 된다. 데이터 하나 하나 마다 같은 값들을 가질 필요가 없다. 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다.
- MongoDB
어떤 프로젝트를 할 것인가에 따라 적합한 데이터베이스를 선택하면 된다.
이번 스파르타코딩클럽 웹개발종합반에서는 No-SQL 데이터베이스인 MongoDB를 익혀볼 예정이다.
mongoDB Atlas 로 시작하기
MongoDB Atlas는 MongoDB를 설계한 사람들이 만든 모든 것을 관리하는 클라우드 데이터베이스로, MongoDB를 사용할때 나의 컴퓨터 리소스를 사용하지 않고 AWS, Azure, GCP를 통해 배포에 관한 모든 것을 통합 관리해주는 원격 DB이다.
mongoDB Atlas 가입하기
계정 가입은 매우매우 간단하다. Start Free를 클릭하면 구글계정 로그인으로 빠르고 간단하게 가입할 수 있다.
mongoDB Atlas - Cluster 생성하기
회원가입을 하면 Atlas에서 굉장히 환영해준다. 이후 바로 나와 같은 초심자를 위해 바로 다음 스텝인 프로젝트 생성과 DB 빌드하는 것을 도와준다. 페이지 흐름 대로 따라가면 문제없이 잘 따라갈수 있다.
1. 프로젝트 생성하기
2. MongoDB 빌드
아무래도 클라우드 서비스를 이용하기 때문에 클라우드 서비스의 여러가지 유형 중에서 선택이 가능하다.
하지만 아무래도 초심자인 나는 무료로 사용할 것이기 때문에 제일 끝에 있는 Free 요금제인 Shared 버전을 생성할 것이다.
Shared버전에서 사용가능한 Region을 선택할수 있는 화면이 나온다.
예전에는 없어서 그나마 가까운 싱가포르를 많이 선택했다고 하는데 우리는 당당하게 Seoul을 선택하면 된다.
하단에 클라우드 리소스 옵션들이 있지만, 무료로 사용하는 Shared 버전에서는 선택사항이 없으므로 건들지 않기로 하자.
3. mongoDB 보안설정하기
먼저 mongoDB를 연결하고 관리하기 위해서 username 과 password를 설정해주면된다.
해당 DB관리자 게정은 mongoDB와 연결할때 반드시 필요하므로 잊어버리지 않도록 꼭꼭 체크한다.
또 그 다음은 Local IP 설정을 해준다.
mongoDB를 아무나 접근하게 해주는것이 아닌 특정 IP에서만 접근할 수 잇도록 해서 좀더 안전하게 사용하도록 한다.
내 IP뿐만아니라 특정 IP를 직접 입력도 가능하고 전체 접근가능하게도 가능하다.
우선 내 로컬 컴퓨터와의 연결은 필수이니 Add My Current IP Address 버튼을 클릭해주면 내 로컬 컴퓨터 IP가 등록된다.
4. 마무리
약간 기다리면 mongoDB 생성이 완료되면서 아래와 같은 모니터링 화면이 나오면 성공!
mongoDB Atlas 연결하기
mongoDB 생성이 끝나면 연결은 간단하다. Connect 버튼을 누르면, 연결 할 수 있는 방법을 안내해준다.
여기서 Connect your application을 선택해보자
그러면 아래와 같이 mongoDB와 연결할 수 있는 방법을 보여준다.
내가 사용하는 언어와 버전을 맞게 선택하면 mongoDB 접속 URL을 보여주는데 이것을 복사해서 사용하면된다.
이때 주소를 그대로 붙여넣기만 해서는 안되구 <password> 부분은 처음 mongoDB 관리계정을 생성할때 설정했던 비밀번호로 대체해주면된다.
mongoDB Atlas 컬렉션 확인하기
mongoDB에 저장된 데이터들은 Browse Collection을 통해서 간단하게 확인할 수 있다.
첫 생성하고 해당 DB를 살펴보면 아무것도 없다.
DB연결을 통해서 성공적으로 작업하게 되면 해당 페이지에 추가한 컬렉션이 나오게 된다.
Python으로 mongoDB 조작하기
python으로 mongoDB를 사용하려면 특별한 라이브러리가 필요하다.
- pymongo : noSQL인 mongoDB를 다루기 위한 파이썬 라이브러리.
- dnspython : Python용 DNS 툴킷. 쿼리, 영역 전송, 동적 업데이트, 네임서버 테스트 및 기타 여러 작업에 사용.
Preferences > Project : pythonPrac > Python Interpereter에서 해당 라이브러리를 설치해준다.
pymongo로 mongoDB연결하기
from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta
별다른 오류 없이 성공했다면 성공적으로 DB에 올라간 것이다.
mongoDB 서버를 확인해보면 내가 입력한 데이터들이 제대로 올라간것을 확인 할수 있다.
pymongo로 데이터 추가/조회/수정/삭제 다루기
DB 데이터 추가
doc = {
'name' : 'bob',
'age' : 27
}
db.users.insert_one(doc)
db.users.insert_one({'name':'bobby','age':21})
db.users.insert_one({'name':'kay','age':27})
db.users.insert_one({'name':'john','age':30})
DB 데이터 조회
# 모든 데이터 뽑아보기
all_users = list(db.users.find({},{'_id':False}))
for user in all_users:
print(user)
#딱 하나 결과값
user = db.users.find_one({'name':'bobby'})
print(user['age'])
DB 데이터 수정
# 특정 데이터 수정하기
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
user = db.users.find_one({'name':'bobby'})
print(user)
DB 데이터 삭제
# 특정 데이터 삭제하기
db.users.delete_one({'name':'bobby'})
user = db.users.find_one({'name':'bobby'})
print(user)
Quiz. 영화 랭킹 웹스크랩핑 결과 이용하기
Q1. 웹스크랩핑 결과 저장하기
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('-----URL-----')
db = client.dbsparta
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')
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')
movies = soup.select("#old_content > table > tbody > tr")
for movie in movies:
a = movie.select_one("td.title > div > a")
if a is not None :
title = a.text
rank = movie.select_one("td:nth-child(1) > img")["alt"]
star = movie.select_one("td.point").text
print(rank, title, star)
doc = {
'title': title,
'rank': rank,
'star': star
}
db.movies.insert_one(doc)
Q2. 영화제목 '가버나움'의 평점을 가져오기
movie = db.movies.find_one({'title':'가버나움'})
print(movie['star'])
Q3. '가버나움'의 평점과 같은 평점의 영화 제목들을 가져오기
movie = db.movies.find_one({'title':'가버나움'})
q_star = movie['star']
find_movies = db.movies.find({'star' : q_star});
for find_movie in find_movies:
print(find_movie['title'])
Q4. '가버나움' 영화의 평점을 0으로 만들기
movie = db.movies.find_one({'title':'가버나움'})
q_star = movie['star']
db.movies.update_one({'title':'가버나움'},{'$set':{'star':"0"}})
movie = db.movies.find_one({'title':'가버나움'})
print(movie)
HW03. 지니뮤직의 1~50위 곡을 스크래핑
https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('---------URL----------')
db = client.dbsparta
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=M&rtm=N&ymd=20210701',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
songs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for song in songs:
songid = song['songid']
if songid is not None:
rank = song.select_one("td.number").text[0:2].strip()
title = song.select_one("td.info > a.title").text.strip()
artist = song.select_one("td.info > a.artist").text.strip()
print(rank, title, artist)
doc = {
'rank': rank,
'title': title,
'artist': artist
}
db.genie.insert_one(doc)
'스파르타코딩클럽 > 웹개발' 카테고리의 다른 글
웹개발종합반 개발일지 | 4주차 - 5,6,7,8강 (0) | 2022.08.28 |
---|---|
웹개발종합반 개발일지 | 4주차 - 1,2,3,4강 Flask 시작하기 (0) | 2022.08.28 |
웹개발종합반 개발일지 | 3주차 - 숙제 (0) | 2022.08.28 |
웹개발종합반 개발일지 | 3주차 - 12,13,14강 Python으로 mongoDB 조작하기 (0) | 2022.08.27 |
웹개발종합반 개발일지 | 3주차 - 9,10,11강 mongoDB Atlas로 시작하기 (1) | 2022.08.27 |