- ์ํ ์ ๋ณด์ ์ฝ๋ฉํธ๋ฅผ API๋ฅผ ํตํด ๊ฐ์ ธ์์ ๋ฉ๋ชจ์ฅ์ ์ ์ฉํ๊ธฐ
- ์ํ ๋ญํน, ์ ๋ชฉ, ์ํ์ค๋ช , ์ฝ๋ฉํธ๋ฅผ API๋ฅผ ํตํด Ajax๋ฐฉ์์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
- ์ด์ ์ ๋ง๋ค์๋ ๋ํ๋ก ๋ฉ๋ชจ์ฅ์ ์์ฉํด์ ๋ง๋ค๊ธฐ
-
<script>
$(document).ready(function () {
listing();
});
function listing() {
$('#cards').empty();
$.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}"
alt="Card image cap">
<div class="card-body">
<p><a href="${url}" class="card-title">< ${title} ></a></p>
<p class="card-text">${desc}</p>
<p class="card-comment">Comment: ${comment}</p>
</div>
</div>`;
$('#cards').append(temp_html);
}
}
})
}
[์์ ๋ชฉํ]
- ํ์ด์ฌ ๊ธฐ์ด ๋ฌธ๋ฒ์ ์๋ค.
- ์ํ๋ ํ์ด์ง๋ฅผ ํฌ๋กค๋ง ํ ์ ์๋ค.
- pymongo๋ฅผ ํตํด mongoDB๋ฅผ ์ ์ดํ ์ ์๋ค.
ํ์ด์ฌ ๊ธฐ์ด ๋ฌธ๋ฒ
- ๋ฐ๋ณต๋ฌธ, ๋ฆฌ์คํธ, ๋์ ๋๋ฆฌ ์์ ๋ฆฌ์คํธ ๋ฃ๊ธฐ
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:
print(person['name'])
- ๋ฒ์ ์ด ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฒ๊ฐ์ ์ธ ๋?
- ์ค์น-์ญ์ -์ค์น-์ญ์ ... ๋ฒ๊ฑฐ๋ก์
- ๊ณต๊ตฌํจ=๊ฐ์ํ๊ฒฝ(๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ด์๋๋ ํ๊ฒฝ) ์ ๋ง๋ค์ด์ ์ฌ๋ฌ ๋ฒ์ ์ ๋ฃ์ด๋๊ณ ์ด๋ค.
- venv(Virtual Environment) ํด๋์ ํฌํจ๋จ.
- ํ์ด์ฐธ ํ๊ฒฝ์ค์ -ํด๋น ํ๋ก์ ํธ-์ธํฐํ๋ฆฌํฐ-requests ์ธ์คํจ
- requests ํจํค์ง, bs4 ํจํค์ง ์ฌ์ฉํด์ ํฌ๋กค๋งํ๊ธฐ
- ํฌ๋กค๋ง์ด ๊ฐ๋ฅํ ์ด์ ?
- 1. ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค. = requests์ ์ญํ
- 2. ๋ด๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ์ ์์๋ธ๋ค. = bs4๊ฐ ํ๋ ์ญํ
- ํฌ๋กค๋ง์ด ๊ฐ๋ฅํ ์ด์ ?
- html์์ copy selector
- ํด๋น ํ๊ทธ์ ์์ฑ๊ฐ์ ๊ฐ์ ธ์ค๋ ค๋ฉด ['์์ฑ'] ์ผ๋ก ์ด๋ค.
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')
print(title)
print(title.text)
print(title['href'])
- ์ํ์ ๋ชฉ ๊ฐ์ ธ์ค๊ธฐ
- tr์ ๊ฐฏ์๋งํฐ ์ํ์ ๋ชฉ์ด ์์ผ๋ฏ๋ก, ๊ทธ ๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฐ๋ค.
-
trs=soup.select('#old_content > table > tbody > tr') for tr in trs: a_tag=tr.select_one('td.title > div > a') if(a_tag is not None): title=a_tag.text print(title)
- ์ฐ์ต, ๋ญํฌ+์ ๋ชฉ+ํ์ ๊ฐ์ ธ์ค๊ธฐ
trs=soup.select('#old_content > table > tbody > tr')
for tr in trs:
a_tag=tr.select_one('td.title > div > a')
if a_tag is not None:
title = a_tag.text
rank = tr.select_one('td:nth-child(1) > img')['alt']
point = tr.select_one('td.point').text
print(rank, title, point)
์ ๋ฒ์ฃผ์ฐจ๊น์ง ํ ๋ด์ฉ์ ๋ณต์ต ๊ฒธ ์์ฉํด์ ์น ํ์ด์ง๋ฅผ ๋ฏ์ด๋ณด๋ ์ฐ์ต์ ํ๋ค.
์ด์ , ํ์ด์ฌ์ ๊ฐ์ง๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃจ๊ณ
์น์ ์๋ ์ ๋ณด๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ, ์ธ๋ชจ์๋ ์น ํ์ด์ง๋ฅผ ๋ง๋๋ ์์ ์ ํ ์ฐจ๋ก์ด๋ค!
ํ๋ผ์คํฌ๋ฅผ ์จ๋ณธ์ ์ด ์๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์นํ์ด์ง๋ฅผ ๋ง๋ค์ด ๋ณธ์ ์ด ์์ด์ ์ด ๋ถ๋ถ์ด ๊ฐ์ฅ ๊ธฐ๋๊ฐ ๋๋ค.
์๋ง ํ์ด์ฌ์ด ๊ฐ์ฅ ์ฝ๊ณ ๋ฌธ๋ฒ์ด ์ง๊ด์ ์ธ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์,
์ด ์ธ์ด๋ฅผ ํ์ฉํด์ ๋ง๋ค ์ ์๋ ํ๋ผ์คํฌ๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ํ๋ ๊ฒ ๊ฐ๋ค.
๋ฐฑ์๋๋ ์ธ์ด ์ ํ์ง๊ฐ ๋ง์ผ๋๊น ์์ํ ๋ ์ฌ์ด๊ฑธ๋ก ์ ํํ๋ ๊ฒ๋ ์ต์ ์ ์ ํ์ด๋ผ๊ณ ์๊ฐํ๋ค!!
๊ธฐ๋๊ธฐ๋!!