μΉ μ€ν¬λν
π©π» μΉ μ€ν¬λνμ΄λ?
μΉ μ¬μ΄νΈμ λ°μ΄ν°λ₯Ό κΈμ΄ λͺ¨μΌλ κ²μ λ»νλ€.
μ€ν¬λν μλ² | -> 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ꡬ쑰μ μ§μ€νμ¬ κ³΅λΆνκΈ° 보λ€λ λ°μ΄ν°λ₯Ό νμ νκ³ , λΆμνλ κ²½νμ ν΄λ³΄λ κ²μ΄ μ€μνλ€!