로딩되면, listing 함수가 실행.
listing 함수 내부에서 a.jax로 데이터를 받아오기.
$(document).ready(function(){
listing();
});
function listing() {
console.log('화면 로딩 후 잘 실행되었습니다');
}
별점같은 경우, repeat 함수를 이용한다.
`let star_image = '⭐'.repeat(star)`
<script>
$(document).ready(function () {
listing();
});
function listing() {
$('#cards-box').empty()
// console.log('화면 로딩 후 잘 실행되었습니다');
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/web/api/movie",
data: {},
success: function (response) {
let rows = response['movies']
// console.log(rows)
for (let i = 0; i < rows.length; i++) {
let title = rows[i]['title']
let desc = rows[i]['desc']
let image = rows[i]['image']
let star = rows[i]['star']
// ( 전에 별찍기 했던 것처럼 )미리 변수에 담아서 넣기.
let star_image = '⭐'.repeat(star)
let comment = rows[i]['comment']
// console.log(title, desc, image, star, comment)
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 class="mycomment">${comment}</p>
</div>
</div>
</div>`
$('#cards-box').append(temp_html)
}
}
})
}
</script>
a = 3 # 3을 a에 넣는다
b = a # a를 b에 넣는다
a = a + 1 # a+1을 다시 a에 넣는다
num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다
# 숫자형
a = 2
b = 3
print(a+b) ## 5
# 문자형
c = 'Ji'
d = 'Hoesu'
print(c+d) ## JiHoesu
# 불린형
## True 또는 False -> "Boolean"형이 들어갈 수도 있다.
is_number = True
# 리스트 생성 및 탐색
a_list = ['사과', '배', '감']
print(a_list[2]) ## 감
print(a_list[1]) ## 배
# 리스트 추가
a_list = []
a_list.append(1)
## 리스트에 값을 넣는다
a_list.append([2,3])
## 리스트에 [2,3]이라는 리스트를 다시 넣는다
## a_list의 값은? [1,[2,3]]
## a_list[0]의 값은? 1
## a_list[1]의 값은? [2,3]
## a_list[1][0]의 값은? 2
# 딕셔너리형 생성 및 탐색
a_dict = {
'name': 'bob',
'age': 27,
}
print(a_dict['name'])
# 리스트 추가
a_dict['height'] = 178
## a_dict의 값은? {'name':'bob','age':21, 'height':178}
## a_dict['name']의 값은? 'bob'
## a_dict['age']의 값은? 21
## a_dict['height']의 값은? 178
people = [{'name':'bob','age':20},{'name':'carry','age':38}]
## peple[0]['name']의 값? 'bob'
## peple[1]['name']의 값? 'carry'
# 추가
person = {'name':'john','age':7}
people.append(person)
## people의 값? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}]
# 수학문제에서
f(x) = 2*x+3
y = f(2)
y의 값은? 7
# 참고: 자바스크립트에서는
function f(x) {
return 2*x+3
}
**# 파이썬에서
def f(x):
return 2*x+3**
y = f(2)
y의 값은? 7
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(15)
is_adult(25)
def oddeven(num):
## oddeven이라는 이름의 함수를 정의한다. num을 변수로 받는다.
if num % 2 == 0:
return True
else:
return False
result = oddeven(20)
## result의 값? True
단수 in 복수형
의 이름을 쓴다.## 리스트 예제
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
### 배열 요소 하나씩 출력하기
for fruit in fruits:
print(fruit)
### 사과의 개수 세기.
count = 0
for aaa in fruits:
if aaa == '사과':
count += 1
print(count)
## 딕셔너리 + 리스트 예제
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:
print(person['name'], person['age'])
### 20세 이상인 사람의 나이 출력 - 조건문 활용
for person in people:
# print(person)
if person['age'] > 20:
print(person['name'])
### 이름을 받으면, 나이를 리턴 - 조건문 활용
def get_age(myname):
for person in people:
if person['name'] == myname:
return person['age']
return '해당하는 이름이 없습니다.'
print(get_age('bob'))
print(get_age('kay'))
💡용어설명
👉 패키지? 라이브러리?
Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위이다. 이런 패키지 의 묶음을 라이브러리 라고 볼 수 있다. 지금 여기서는 외부 라이브러리를 사용하기 위해서 패키지를 설치한다.
즉, 여기서는 패키지 설치 = 외부 라이브러리 설치
👉 정리하자면,
가상환경(virtual environment)은
같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경 입니다.
👉 앱을 설치할 때 앱스토어/플레이스토어를 가듯이,
새로운 프로젝트의 라이브러리를 가상환경(공구함)에 설치하려면 pip 를 이용하게 된다.
requests 패키지 설치해보기
파이참 - 상단 메뉴 - 파일 - project interpreter 화면에서 + 버튼
requests를 검색 - 패키지 설치
# requests 라이브러리 불러오기
## requests 라이브러리 설치 필요
import requests
r = requests.get('url 주소')
rjson = r.json()
# 데이터 가져오기
## 라이브러리마다 쓰는 방식이 다르므로, 다른 라이브러리의 경우 사이트에서 찾아서 볼 것.
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
print(rjson)
##
rows = rjson['RealtimeCityAir']['row']
for row in rows:
gu_name = row['MSRSTE_NM']
gu_mise = row['IDEX_MVL']
# print(gu_name, gu_mise)
if gu_mise < 60:
print(gu_name)
# print(rjson)
import requests
from bs4 import BeautifulSoup
# 타겟 URL을 읽어서 HTML를 받아오고,
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)
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')
👉 headers : headers는 우리가 코드에서 콜을 날리면, 마치 브라우저에서 콜을 날린 것처럼(사람인 것처럼) 해주려고 쓰는 것. - url만 바꿔서 사용하면 된다.
👉가져오는 데이터가 리스트 형태일 경우, select_one()을 사용하면 오류가 난다.
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')
# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
movies = soup.select('#old_content > table > tbody > tr')
# 나의 풀이
for movie in movies:
name = movie.select_one('td.title > div > a')
star = soup.select_one('td.point')
rank = soup.select_one('td:nth-child(1) > img')
# print(a)
if name is not None:
print(rank['alt'], name.text, star.text)
# 강의 풀이
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)
👉 Database 는 데이터를 나중에 잘 찾기위해 쓴다.
DB는 크게 두 가지 종류가 있다.
RDBMS(SQL)
: 칸을 만들어두고 데이터를 채우는 형식 (엑셀 처럼)
ex) MS-SQL, My-SQL 등
장점
단점
중간에 열 등이 추가되는 식으로 양식이 바뀌면, 유연하게 대처하기가 어렵다.
ex) 처음에 이름, 전화번호만 입력하다가 나중에 이메일, 주소 등을 더 추가하고자 할때
No-SQL(Not only SQL)
ex) MongoDB
: 정해진 칸이 없고, 데이터가 들어오는 순서대로 쌓는다.
장점
단점
from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
## URL는 위 참고 화면에서 2번 'Add your conneciton string into your application code'
db = client.dbsparta
doc = {
'name':'bob',
'age':27
}
db.users.insert_one(doc)
db.collection.insert_one( )
# 'users'라는 collection에 {'name':'bobby','age':21}를 넣습니다.
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.collection.find_one(query, projection, options)
user = db.users.find_one({'name':'bobby'})
## 또는
user = db.users.find_one({'name':'bobby'},{'_id':False})
print(user)
print(user['age'])
list(db.collection.find(query, projection, options)
all_users = list(db.users.find({},{'_id':False}))
print(all_users[0]) # 0번째 결과값을 보기
print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기
for user in all_users:
print(user)
db.collection.update_one(query, newvalues)
👉 주의 : $set을 붙이지 않으면, 바꾸려는 데이터 뿐 아니라 기존 데이터까지 모두 사라지게 된다.
- **코드**
```python
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
```
db.collection.delete_one(query)
db.users.delete_one({'name':'bobby'})
user = db.users.find_one({'name':'bobby'})
print(user)
import requests
from bs4 import BeautifulSoup
**from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.xuc2jrn.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta**
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)**
👉 데이터를 insert로 불러오기전에, document 딕셔너리를 만들어 불러오기 할 것.
## 나의 풀이
gover = db.movies.find_one({'title':'가버나움'},{'_id':False})
print(gover)
print(gover['star'])
### 나의 풀이
movies = list(db.movies.find({},{'_id':False}))
goverStar = gover['star']
print(goverStar)
print(movies)
for movie in movies:
if movie['star'] == goverStar:
print(movie['title'])
### 강의 풀이
movie = db.movies.find_one({'title':'가버나움'})
star = movie['star']
all_movies = list(db.movies.find({'star': star},{'_id':False}))
for m in all_movies:
print(m['title'])
### 나의 풀이
db.movies.update_one({'title': '가버나움'},{'$set':{'star':'0'}})
📗 출처