๐ฉ๐ป ์น ์คํฌ๋ํ์ด๋?
์น ์ฌ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ธ์ด ๋ชจ์ผ๋ ๊ฒ์ ๋ปํ๋ค.
์คํฌ๋ํ ์๋ฒ | -> request | (๊ธฐ์กด ํ์ฌ์) ์น ์๋ฒ | -> request | (๊ธฐ์กด ํ์ฌ์) DB |
response <- | response <- |
โ๏ธ์คํฌ๋ํ์ ํ์ฉ
์คํฌ๋ํ์ ์ผํ๋ชฐ, ๊ธ์ต, ์ ๋ฌด ์๋ํ ๋ฑ๋ฑ์์ ์ฌ์ฉ๋๋ฉฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๋ฉฐ ์น ์คํฌ๋ํ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ฐ๊ณตํ์ฌ ์ฌ์ฉํ๋ ์ผ์ ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ค.
ํ์ด์ฌ์ ์ฌ์ฉํ๋ฉด ์น ์คํฌ๋ํ์ด ๋ณด๋ค ๊ฐํธํ๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ์ ๋ง์ด ์ด์ฉํ๋ค.
๋น์ฐํ๊ฒ๋ ์คํฌ๋ํ๊ณผ ๋๋ถ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ DB์ API์ค๊ณ ๋ํ ์ด๋ค ํํ๋ก ๊ฐ๋ฐํด์ผ ํจ์จ์ ์ผ์ง ์๊ฐํ๋ ๊ฒ์ด ์ค์ํ๋ค.
โ๏ธ์คํฌ๋ํ ์์
- ์คํฌ๋ํ์ผ๋ก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ (HTML ๋ฌธ์ ๋ฐ๊ธฐ)
- ์๋น์ค๋ฅผ ์ํ API๊ฐ๋ฐ (๋ฌธ์๋ฅผ parsing(ํ์ฑ) ํ๊ธฐ & ํ์ํ ๋ฐ์ดํฐ ์ถ์ถ)
- ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํ ์บ์ ์๋ฒ๊ตฌ์ฑ
โ๏ธ์คํฌ๋ํ์ ์ฃผ์์ฌํญ
์คํฌ๋ํ์ ์๋ฌด ์ฌ์ดํธ๋ ๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์๋๋ค!!! ์์นซํ๋ฉด ํ์ฌ์ ์ค์ํ ์์ฐ์ธ ๋ฐ์ดํฐ์ค ์ฌ์ฉํ๋ฉด ์๋๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์๊ณ , ํด๋น ์น ์๋ฒ์ ๋ถํ๋ฅผ ์ผ์ผํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ผ ์ฌ์ฉํด๋ ๋๋ ๋ฐ์ดํฐ์ธ์ง๋ ์ด๋ป๊ฒ ํ์ธํ ๊น?
๋ฐ๋ก robots.txt์ ์ ์ํ์ฌ /Disallow ์ฒ๋ฆฌ๊ฐ ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํด๋ณด๋ฉด ๋๋ค!
(ex - finance.yahoo.com/robots.txt ์ ์ํ์ฌ ๊ฐ์ ธ์๋ ๋๋ ๋ฐ์ดํฐ์ธ์ง ํ์ธ)
/Disallow ๋ฐ์ ์๋ ๊ฒ๋ค์ ์ฌ์ฉํ๋ฉด ์๋๋ ๊ฒ๋ค์ด๋ฉฐ
Allow ๋ก ๋์ด ์๋ ๊ฒ๋ค์ ๊ธ์ด์๋ ๋๋ ๊ฒ๋ค์ด๋ค.
๋ฌผ๋ก , Allow ์ฒ๋ฆฌ๊ฐ ๋์ด ์๋ค๊ณ ํด์ ๊ธฐ์กด ์๋ฒ์ ๋ฌด๋ฆฌ๊ฐ ๊ฐ๋งํผ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ์๋๋ค.
๋ํ ๋ค๋ฅธ ๊ฒ๋ค๋ robots.txt์ ์ ์๋ ๊ท์น์ ์ค์ํ๋ค.
โ๏ธ์คํฌ๋ํ ํ๊ธฐ
- HTML์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ
- ์ฌ์ฉํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ ค์ฃผ๋ ์น ์ฌ์ดํธ ๋ด์์ ํ์ด์ง ์ฐํด๋ฆญ
- ๊ฒ์ฌํ๊ธฐ
- element(์์) ์ ํ
- jsoup implement ํด์ฃผ๊ธฐ (Spring boot ์ฌ์ฉ์)
implementation 'org.jsoup:jsoup:1.18.1'
3. jsoup API ์ฐธ๊ณ ํ์ฌ ์ฝ๋์ง๊ธฐ (์๋๋ ์ฐธ๊ณ ์ฉ ์์)
// ์คํฌ๋ํ ์์ (ํด๋์ค ๋ฑ์ ๋ฐ๋ก ์ค์ ํด์ผํจ)
try {
// ํ์ํ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
Connection connection = Jsoup.connect("https://finance.yahoo.com/quote/COKE/history/?frequency=1mo&period1=99153000&period2=1725793919");
Document document = connection.get();
// ํ์ฑ & ๋ฐ์ดํฐ ์ถ์ถ
Elements tbody = document.getElementsByTag("tbody");
for(Element ele : tbody){
Elements eles = ele.getElementsContainingOwnText("dividend").parents();
System.out.println(eles);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
โ๏ธ jsoup API ์ ๋ฆฌ ์ฐธ๊ณ ํ๊ธฐ
https://jsoup.org/apidocs/ ์์ jsoup API ์ ๋ฆฌ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฏ๋ก ํด๋น ์ฌ์ดํธ์์ ํด๋์ค์ ๋ฉ์๋ ํ์ธ ํ ๊ฐ๋ฐํ ๋ ์ฌ์ฉ
-> ์ฌ์ดํธ ์ ์ ํ class jsoup ํด๋ฆญ -> connection ๋ฉ์๋ ์ฌ์ฉ๋ฐฉ๋ฒ ๋ฑ ํ์ธ ๊ฐ๋ฅ
(ex) connection.get(); connection.post() ๋ฑ..
(cf) Document๋ Element๋ฅผ ์์ ๋ฐ์ ํด๋์ค์ด๋ฏ๋ก Element์ ๋ฉ์๋๋ค์ ๋ค ์ฌ์ฉ๊ฐ๋ฅํ๋ค***
์คํฌ๋ํํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ ์ฌ์ดํธ์ฌ๋ ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ฉด ๋ฐฉ๋ฒ์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง ์ ๋ฐ์ ์๋ค.
๋ฐ๋ผ์ ์คํฌ๋ํ์ HTML๊ตฌ์กฐ์ ์ง์คํ์ฌ ๊ณต๋ถํ๊ธฐ ๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฅผ ํ์ ํ๊ณ , ๋ถ์ํ๋ ๊ฒฝํ์ ํด๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค!
'๋ฐฑ์๋ > Spring boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
EC2์์ PostgreSQL์ Docker๋ก ์ด์ํ๋ฉฐ ๊ฒช์๋ ์ค๋ฅ ํด๊ฒฐ ๊ณผ์ ์ ๋ฆฌ (0) | 2025.02.14 |
---|---|
Gradle์ด๋? (0) | 2024.11.25 |
๋ฐฐ๋น๊ธ Project (2) | 2024.09.23 |
Redirect๋ก alert ๋์ฐ๊ธฐ (0) | 2024.05.22 |
Controller ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ๋ฒ๋ค (0) | 2023.12.06 |