1. SWING
(1) 예전의 Java GUI는 AWT로 개발했었음
- SWING은 AWT의 후속버전으로 기본으로 설치됨
1) 기본특징
- 컴포넌트가 플랫폼 독립적임
- 커스터마이징을 통해 look and feel 설정 가능함
- 다수의 컴포넌트
2) 사용방법
- JFrame을 상속
- JFrame 객체를 멤버로 영입
(2) 리스너(Listener)
이벤트(클릭 등)를 주시하는 역할
리스너를 달지 않으면 이벤트가 발생해도 무시된다.
package day18;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MusicChart extends JFrame implements ActionListener {
JLabel[] labels;
JButton bt;
JLabel log;
int count = 0;
MusicChart(){
bt = new JButton("GET!!!");
bt.setBounds(20, 20, 340, 30); // x, y, width, height
add(bt);
bt.addActionListener(this);
labels = new JLabel[10];
for(int i=0; i<10; i++) {
labels[i] = new JLabel("Ranking " + (i+1));
labels[i].setBounds(20, 80 + (40*i), 340, 30);
add(labels[i]);
}
log = new JLabel("Log Region");
log.setBounds(20, 480, 340, 30);
add(log);
setSize(400, 600);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MusicChart mc = new MusicChart();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == bt) {
System.out.println("Button Clicked");
count++;
log.setText("Button Clicked!! Count : " + count);
}
}
}
JFrame을 갑자기 왜..하는진 모르겠지만..
현장에서 많이 쓰이나? 잘 모르겠다..
데이터 긁어와서 크롤링 하려나보다
재밌겠다!!
2. 웹 크롤링(웹 스크래핑)
cf) API 방식 : 정해진 약속에 따라 데이터 송수신
(1) 크롤링의 어원
최초의 검색 엔진 : 크롤러
크롤러는 무슨 일을 하나요? 크롤링
(2) 크롤링
웹 상의 데이터를 수집하고 필요한 데이터만 추출하는 것
(3) 크롤링 라이브러리
파이썬의 BeautifulSoup의 자바 버전인 JSoup을 이용
( BeautifulSoup 은 자바에서 기본적으로 제공해주는 것이 아님)
➡️ 구문을 해석하여 필요한 내용 추출
JSoup는 HTML Code에서 내가 필요한 내용만
CSS Selector 문법으로 가져올 수 있는 라이브러리
(4) 크롤링 절차
- JSoup 라이브러리 다운받기
- PC에 내가 아는 디렉토리에 저장
eclipse > extlib 폴더를 만들고 저장 - eclipse에서 프로젝트 우클릭
맨 아래 Properties > Java Build Path > Libraries 탭 > classpath 선택 > Add External Jars 버튼이 활성화됨 > 버튼 클릭해서 저장해둔 파일 선택
package day18;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MusicChart extends JFrame implements ActionListener {
JLabel[] labels;
JButton bt;
JLabel log;
int count = 0;
MusicChart(){
bt = new JButton("GET!!!");
bt.setBounds(20, 20, 340, 30); // x, y, width, height
add(bt);
bt.addActionListener(this);
labels = new JLabel[10];
for(int i=0; i<10; i++) {
labels[i] = new JLabel("Ranking " + (i+1));
labels[i].setBounds(20, 80 + (40*i), 340, 30);
add(labels[i]);
}
log = new JLabel("Log Region");
log.setBounds(20, 480, 340, 30);
add(log);
setSize(400, 600);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MusicChart mc = new MusicChart();
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == bt) {
System.out.println("Button Clicked");
count++;
log.setText("Button Clicked!! Count : " + count);
}
String URL = "http://music.bugs.co.kr/chart";
try {
Document doc = Jsoup.connect(URL).get();
System.out.println(doc);
Elements elements = doc.select("p.title");
int rank = 1;
for(Element element : elements) {
String text = "Ranking " + rank + ":" + element.text();
System.out.println(text);
labels[rank-1].setText(text);
if(rank == 10) break;
rank++;
}
rank = 1;
Elements artists = doc.select("p.artist");
for(Element artist : artists) {
String text = labels[rank-1].getText() + "[" + artist.text() + "]";
labels[rank-1].setText(text);
if(rank == 10) break;
rank++;
}
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
import를 엄청 많이 해야한다
왜 얘넨 자동으로 안 되지
'📁💻 웹개발 강의 아카이빙 > (2024)☕JAVA' 카테고리의 다른 글
day17 (0) | 2024.09.23 |
---|---|
day16 (0) | 2024.09.18 |
day15 (0) | 2024.09.18 |
day14 (0) | 2024.09.18 |
day13 (0) | 2024.09.11 |