# 복습겸 AJAX 형태로 붙여넣기

기존의 같은 포스트 방식이 아닌 여러가지 형태로 넣었다
http://spartacodingclub.shop/web/api/movie 해당 api를 가지고 만들었다
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/web/api/movie",
data: {},
success: function(response){
let movies = response['movies']
for (let i = 0 ; i < movies.length; i++) {
let movie = movies[i]
let title = movie['title']
let desc = movie['desc']
let image = movie['image']
let comment = movie['comment']
let star = movie['star']
let star_image = '⭐'.repeat(star)
let temp_html = `<div class="col">
<div class="card h-100">
<img src="${image}"
class="card-img-top">
<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)
}
}
})
# 파이썬 기초공부


a = 3 // 3을 a에 넣는다
b = a // a를 b에 넣는다
a = a + 1 // a+1을 다시 a에 넣는다
num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다
// 변수의 이름은 마음대로 지을 수 있음!
// 진짜 "마음대로" 짓는 게 좋을까? var1, var2 이렇게?
# 자료형


name = 'bob' // 변수에는 문자열이 들어갈 수도 있고,
num = 12 // 숫자가 들어갈 수도 있고,
is_number = True // True 또는 False -> "Boolean"형이 들어갈 수도 있습니다.
// 그리고 List, Dictionary 도 들어갈 수도 있죠. 그게 뭔지는 아래에서!

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 = {}
a_dict = {'name':'bob','age':21}
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}]
// people[0]['name']의 값은? 'bob'
// people[1]['name']의 값은? 'carry'
person = {'name':'john','age':7}
people.append(person)
// people의 값은? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}]
// people[2]['name']의 값은? 'john'
# 함수


// 수학문제에서
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_all(a,b,c):
return a+b+c
def mul(a,b):
return a*b
result = sum_all(1,2,3) + mul(10,10)
// result라는 변수의 값은? 106
# 조건문


def oddeven(num): // oddeven이라는 이름의 함수를 정의한다. num을 변수로 받는다.
if num % 2 == 0: // num을 2로 나눈 나머지가 0이면
return True // True (참)을 반환한다.
else: // 아니면,
return False // False (거짓)을 반환한다.
result = oddeven(20)
// result의 값은 무엇일까요? True
def is_adult(age):
if age > 20:
print('성인입니다') // 조건이 참이면 성인입니다를 출력
else:
print('청소년이에요') // 조건이 거짓이면 청소년이에요를 출력
is_adult(30)
// 무엇이 출력될까요? 성인입니다
# 반복문


fruits = ['사과','배','감','귤']
for fruit in fruits:
print(fruit)
// 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.

fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
count = 0
for fruit in fruits:
if fruit == '사과':
count += 1
print(count)
// 사과의 갯수를 세어 보여줍니다.
def count_fruits(target):
count = 0
for fruit in fruits:
if fruit == target:
count += 1
return count
subak_count = count_fruits('수박')
print(subak_count) //수박의 갯수
gam_count = count_fruits('감')
print(gam_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'])
// 이번엔, 반복문과 조건문을 응용한 함수를 만들어봅시다.
// 이름을 받으면, age를 리턴해주는 함수
def get_age(myname):
for person in people:
if person['name'] == myname:
return person['age']
return '해당하는 이름이 없습니다'
print(get_age('bob'))
print(get_age('kay'))
# 파이썬 패키지 다운받아보기





# 파이썬 requests 라이브러리
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
파이썬은 requests 라이브러리를 다운로드 받은뒤에
간편하게 html 주소를 가져오면된다
# 크롤링
크롤링할때 2가지를 해야한다
1) html 가져오기
이전에 계속해오던것
2) 내용을 가져오기
쉽게찾는 beautiful soup 이라는 라이브러리를 이용해서 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')
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
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')
#############################
// (입맛에 맞게 코딩)
#############################

태그 안의 텍스트를 찍고 싶을 땐 → 태그.text
태그 안의 속성을 찍고 싶을 땐 → 태그['속성']
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
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
// HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')
// select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')
// movies (tr들) 의 반복문을 돌리기
for movie in movies:
// movie 안에 a 가 있으면,
a_tag = movie.select_one('td.title > div > a')
if a_tag is not None:
// a의 text를 찍어본다.
print (a_tag.text)

// 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
// 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')
// 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

1. 원하는 부분에서 마우스 오른쪽 클릭 → 검사
2. 원하는 태그에서 마우스 오른쪽 클릭
3. Copy → Copy selector로 선택자를 복사할 수 있음

크롤링 할 부분 왼쪽클릭 -> copy -> copy selector
# DB 정리















# mongoDB 가입방법




https://account.mongodb.com/account/register
Cloud: MongoDB Cloud
account.mongodb.com














# mongoDB 연결하기



pymongo, dnspython




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


doc = {
'name':'bob',
'age':27
}
db.users.insert_one(doc)



# pymongo로 DB 조작하기
- DB에 넣기
doc = {'name':'bobby','age':27}
db.users.insert_one(doc)
- DB에서 전체 꺼내기
all_users = list(db.users.find({ //조건 },{'_id':False}))
for user in all_users:
print(user)
- DB에서 하나만 꺼내기
user = db.users.find_one({'name':'bobby'})
print(user)
- DB 수정하기
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
- DB 삭제하기
db.users.delete_one({'name':'bobby'})
- 전체요약
# 저장 - 예시
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'})
# 결과 예시

# 지니차트 뽑아오는 숙제

# 느낀점
어느날 크롤링이라는 단어를 들어본적은 있다
그런데 그게 그냥 뽑아오는거 라고 추상적으로만 알고있었는데
오늘 크롤링이 무엇인지 확실히 알 수 있는 시간을 가졌던거 같다
또한 파이썬과 mongoDB를 사용할줄 알게되었고
확실히 실습을 통해 배우니까 빨리빨리 늘고 재미도 있는거 같다
원래 오늘 다른 언어 강의도 듣고 책도 읽고 하려했는데
새로 주문한 노트북이 도착해서 초반 세팅하느라 몇시간 보내고
항해99 사전설명회 듣고 그러다보니 하루가 다 지나
새벽에 공부하고 글을 적고있다..ㅎㅎ
내일은 노트북에 꽂을 랜포트랑 마우스를 보러 이마트갔다와서
또 열심히 공부를 해볼 생각이다!
'항해99 개발일지' 카테고리의 다른 글
[항해99] 웹개발 종합반 5주차 (내용정리) (0) | 2022.08.13 |
---|---|
[항해99] 웹개발 종합반 4주차 (내용정리) (0) | 2022.08.13 |
[항해99] 웹개발 종합반 2주차 (내용정리) (0) | 2022.08.13 |
[항해99] 웹개발 종합반 1주차 (내용정리) (0) | 2022.08.13 |
[항해99] 네이버블로그에서 Tstory로 이전! (0) | 2022.08.13 |