티스토리 뷰
카드 메모장 응용
$(document).ready(function () {
$('#cards-box').empty() 로딩과 동시에 값 받아오기
listing();
});
function listing() {
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/post",
data: {},
success: function (response) {
let rows = response['articles']
for (let i = 0; i < rows.length; i++) {
let comment = rows[i]['comment'] 입력값 이름 정하기
let desc = rows[i]['desc']
let image = rows[i]['image']
let title = rows[i]['title']
let url = rows[i]['url']
let temp_html = `<div class="card">
<img class="card-img-top" src="${image}" 기존 카드 포맷에 영화 후기 API의 ${입력값} 입력
alt="Card image cap">
<div class="card-body">
<a href="${url}" class="card-title"> ${title} </a>
<p class="card-text">${desc}</p>
<h5 class="comment">${comment}</h5>
</div>
</div>`
$('#cards-box').append(temp_html)
}
}
})
}
파이썬
함수 만들기
def sum(num1,num2):
return num1+num2
result = sum(2,3)
print(result) sum은 꼭 sum일 필요 없음. 원하는 대로 정의
조건문
age = 25
if age > 20 :
print('성인입니다')
else:
print('청소년입니다') 또는
def is_adult(age):
if age > 20:
print('성인입니다!')
else:
print('청소년입니다!')
is_adult(25)
반복문
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
count = 0
for ff in fruits: ff는 fruits 리스트의 값을 지칭(다르게 정의해도 됨)
if ff == '배':
count += 1
print(count)
패키지 사용하기
import requests
r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json() 외우려고 하지 말 것!
gus = rjson['RealtimeCityAir']['row'] 임의의 이름
for gu in gus:
gu_name = gu['MSRSTE_NM'] RealtimeCityAir에 포함된 '구'들 중 '구'의 '이름'의 값을 정의
gu_mise = gu['IDEX_MVL'] RealtimeCityAir에 포함된 '구'들 중 '구'의 '미세먼지 수치'의 값을 정의
if(gu_mise > 60) :
print(gu_name,gu_mise) '구'들 중 '미세먼지 수치'가 60 초과면 '이름', '미세먼지 수치' 표시
패키지 사용하기
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.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a') 갖고 오고 싶은 데이터 우클릭 →복사→Copy Selector
print(title.text) 태그의 텍스트만 갖고오기
print(title['href']) 태그의 속성만 갖고오기
네이버 영화랭킹 API
trs = soup.select('#old_content > table > tbody > tr') 한 줄씩 Copy Selector 했을 때 공통되는 부분
for tr in trs: trs 중에 tr이란:
a_tag = tr.select_one('td.title > div > a') 타이틀
if a_tag is not None: 중간의 구분선 등 값이 None인 값 제외
title = a_tag.text 타이틀에서 텍스트만 뽑아냄 (안 그러면 <a href="/movie/bi/mi/basic.nhn?code=37886" title="클레멘타인">클레멘타인</a> 식으로 나옴)
rank = tr.select_one('td:nth-child(1) > img')['alt'] 랭킹, rank는 a_tag(타이틀)가 아니라 tr에서 뽑아야 함 (copy selector 시 #old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img 로 나옴, 그 중 alt 값(순위))
star = tr.select_one('td.point').text 평점, 위와 동일
데이터베이스(몽고DB): 데이터를 쉽게 찾아 쓰기 위함.
RDBMS(SQL) vs NoSQL
SQL:
형식이 정형화되어 있어(열, 행을 미리 정해놔야 함) 데이터의 일관성이나 분석에 용이 (ex. My-SQL, MS-SQL, Oracle)NoSQL: dictionary 형태로 데이터 저장하여 데이터 형식을 통일할 필요가 없음. 데이터 적재가 유연하고 자유로운 대신 일관성 부족 (ex. MongoDB)
#insert
doc = {'name':'jane','age':21}
db.users.insert_one(doc) db 안의 users 콜렉션에 추가됨
#find
같은 나이의 사람 찾기
same_ages = list(db.users.find({'age':21},{'_id':False})) 상단의 _id값 제외
print (same_ages)
또는 for person in same_ages:
print(person)
'매트릭스'와 평점이 같은 영화 찾기
movie = db.movies.find_one({'title':'매트릭스'}) movies DB
target_star = movie['star']
target_movies = list(db.movies.find({'star':target_star},{'_id':False}))
for target in target_movies:
print(target['title'])
조건 주지 않고 찾기 (전체 리스트 나열)
same_ages = list(db.users.find({},{'_id':False}))
하나만 찾기
user = db.users.find_one({'name':'bobby'},{'_id':False})
print(user) 이름이 bobby인 값이 여러 개라도 가장 상단의 값만 가져 옴
print(user['age']) 이름이 bobby인 값의 나이
#update
db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) 값이 같은 항목을 다 바꿀 땐 update_many
#delete
db.users.delete_one({'name':'bobby'}) delete_many도 있음
지니뮤직 크롤링
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
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=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser') import 위해 필요
#body-content > div.newest-list > div > table > tbody > tr:nth-child(4) 지니뮤직 차트 코드
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
title = tr.select_one('td.info > a.title.ellipsis').text.strip() strip()은 공백 제거
rank = tr.select_one('td.number').text[0:2].strip()
artist = tr.select_one('td.info > a.artist.ellipsis').text
print(rank, title, artist)
'Experience' 카테고리의 다른 글
스파르타 코딩클럽 개발일지 4주차 (0) | 2021.07.18 |
---|---|
스파르타 코딩클럽 2주차 개발일지 (0) | 2021.07.01 |
스파르타 코딩클럽 1주차 개발일지 (0) | 2021.06.22 |
VPN 우회하여 ESPN으로 미국 스포츠 보기 (0) | 2020.12.07 |
[충주~제천 여행] 3일차: 정방사, 물태리빵집, 대추나무집 (0) | 2020.08.13 |
- Total
- Today
- Yesterday