˙ Ajax 복습(로딩후 실행, 반복)
$(document).ready(function () {
$('#cards-box').empty();
listing();
}); //새로고침 후 바로 listing 함수를 실행하게 하는코드
$('#cards-box').empty();코드는 아래에 cards-box
id를 비우고 시작하기 위한 코드
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'] //Api내 articles안에서 반복되며 각각의 변수에 데이터 저장
let temp_html = `<div class="card">
<img class="card-img-top" src="${image}" alt="Card image cap">
<div class="card-body">
<a href="${url}">${title}</a>
<p class="card-text">${desc}</p>
<p class="card-text comment">${comment}</p>
</div>
</div>` //temp_html이라는 변수에 card형식의
form 자체를 가져와서 각각의 자리에
${}형식으로 변수의 데이터를 저장
$('#cards-box').append(temp_html); //body내 cards-box id에 위 temp_html
temp_html form을 반복하며 추가
(새로고침하면 원래 있던 form을 지워주기위해
위쪽에 empty jquery를 추가)
}
}
})
}
* 파이썬
˙ Dictionary 형과 List형의 조합
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'
˙ 객체/리스트 차이
▶ bob, 20은 리스트안의 **객체**
people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
print(people['name']) ▶ 에러남(객체가 아니라 리스트기 때문)
print(people[0]['name']) ▶ bob 출력
for person in people: // for 문을 적용시킨다면
p_name = person['name'] {'name': 'bob', 'age': 20}전체가 객체로 인식되어 에러나지 않음
▶ bob, carry, 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 is_adult(age):
if age > 20:
print('성인입니다') # 조건이 참이면 성인입니다를 출력
else:
print('청소년이에요') # 조건이 거짓이면 청소년이에요를 출력
is_adult(30)
# 무엇이 출력될까요?
˙ 반복문
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: // people의 데이터를 person에 차례대로 저장
print(person)
▼
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]
for person in people: //people의 데이터를 하나씩 꺼내서 사용하는 형태
print(person['name'], person['age'])
▼
bob 20
carry 38
john 7
smith 17
ben 27
˙ requests 라이브러리 (해당 url에 데이터코드 요청해서 받아오는 역할)
import requests # requests 라이브러리 설치 필요
(setting -> project interpreter -> "+" -> 검색후 install)
r =requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json() // 데이터를 rjson에 저장
gus = rjson['RealtimeCityAir']['row'] // row안의 데이터를 gus에 저장
for gu in gus: //gus의 안의 데이터를 하나씩 불러와서 gu에 차례대로 저장
gu_name = gu['MSRSTE_NM']
gu_mise = gu['IDEX_MVL']
if (gu_mise > 100) :
print(gu_name,gu_mise)
- 크롤링 : 받아온 정보를 솎아내는 작업
(requests : 데이터요청 , beautifulsoup : 데이터솎아내기) - BeautifulSoup 라이브러리 : (받아온 데이터를 검색하기 용이한 상태로 만듬)
기본세팅
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.nhn?sel=pnt&date=20200303',headers=headers) # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦 # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨 # 이제 코딩을 통해 필요한 부분을 추출하면 된다. soup = BeautifulSoup(data.text, 'html.parser')
- soup.select는 일치하는 여러개를 찾아서 리스트로 반환
- soup.select_one은 최초로 일치하는 하나를 반환
아래의 예시를 보면 이해가 빠를 것이다.
html= """
<html>
<a class="click" href="naver.com"> 네이버링크 </a>
<a class="click1" href="daum.net"> 다음링크 </a>
</html>
"""
select를 사용할 경우
soup = BeautifulSoup(html,"html.parser")
data = soup.select("a")
print(data)
>> [<a class="click" href="naver.com"> 네이버링크 </a>, <a class="click1" href="daum.net"> 다음링크 </a>]
2.select_one을 사용할 경우
soup = BeautifulSoup(html,"html.parser")
data = soup.select_one("a")
print(data)
>> <a class="click" href="naver.com"> 네이버링크 </a>
select_one은 문서의 처음부터 시작하여 조건에 맞는 하나를 찾게 된다. 반면 select는 모든 a태그를 찾아 리스트에 담게 된다.
따라서 select_one은 바로 .text ["href] 등을 적용하는 것이 가능하다.
soup = BeautifulSoup(html,"html.parser")
data = soup.select_one("a")
title = data.text
link = data["href"]
하지만 select의 경우에는 for 문을 통해 다시 개별요소에 접근을 해야한다.
soup = BeautifulSoup(html,"html.parser")
data = soup.select("a")
for i in data:
title = i.text
link=i["href"]
˙ 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.nhn?sel=pnt&date=20200303',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#old_content > table > tbody > tr') //tr까지 붙여줌 !
for tr in trs:
a_tag = tr.select_one('td.title > div > a') //tbody > tr 뒤 title 부분만 가져와서 a_tag에 저장(어디까지 빼고 더할지 범위지정 중요)
if a_tag is not None:
rank = tr.select_one('td:nth-child(1) > img')['alt'] //img의 alt 속성값 가져오기
title = a_tag.text
star = tr.select_one('td.point').text //td태그의 point class를 가져와서 text만 추출한뒤 star에 저장
print(rank,title,star)
˙ 참고
for tr in trs:
title = tr.select_one('td.info > a.title.ellipsis').text.strip() //strip() : 공백제거
singer = tr.select_one('td.info > a.artist.ellipsis').text.strip()
rank = tr.select_one('td.number').text[0:2].strip()
//문자열 자를때 [0:2]와 같이 사용(문자열 0부터 2까지만 자르겠다)
print(rank,title,singer)
˙ 참고2
og_image = soup.select_one('meta[property="og:image"]')
- select 사용시 code selector로 가져온 주소가 먹히지 않을때 태그를 이용해 데이터를 가져오는 방법도 있음
- 데이터베이스(데이터를 더 잘 정리하고 찾기위함)
(서버,데이터베이스-컴퓨터 내 하나의 프로그램,역할으로 이해)
mongoDB : 데이터베이스
Robo3T : mongoDB의 데이터를 보기위한 프로그램
SQL : 정해진 형식에 데이터를 저장(엑셀 같은 형식)
No-SQL : 형식이 정해져 있지 않고 자유롭게 딕셔너리 형태로 저장
- Robo3T(pymongo 실행방법 검색창 cmd - mongod - 브라우저에 localhost:27017 입력하고 메시지 뜨는지확인)
기본형식
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta
// insert / find / update / delete
insert
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta doc = {'name':'jane','age':21} db.users.insert_one(doc) //db 데이터에 users안에 doc 딕셔너리를 삽입해라(users부분 바꿔주면 collection안에 자동으로 생성됨)
find
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta same_ages = list(db.users.find({},{'_id':False})) //db안에 users에서 모든 딕셔너리를 찾아라 but, _id값은 가져오지 말아라
user = db.users.find_one({'name':'bobby'}) // bobby라는 이름 하나만 찾아라
update
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) //bobby인애를 찾아서 19살로 바꿔라
참고: db.movies.update_one({'title':'매트릭스'},{'$set':{'star':'0'}}) //매트릭스 title의 star를 0으로 만들어라('0':문자열, 그냥 0:숫자 - 데이터의 형식 확인 후 통일시켜 주는게 좋음)
delete
from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta db.users.delete_one({'name':'bobby'}) //bobby를 삭제해라
'코딩수강일지 > 팀스파르타 웹개발 종합반 수업일지' 카테고리의 다른 글
웹개발 종합반 4주차 수강일지 (0) | 2021.12.19 |
---|---|
웹개발 종합반 2주차 수강일지 (0) | 2021.12.18 |
웹개발 종합반 1주차 수강일지 (0) | 2021.12.18 |
웹개발 종합반 5주차 수강일지 (0) | 2021.12.13 |