다나와 에서 '잘만' 검색어로 상품검색할때 다나와에서는 상품리스트를 ajax통신으로 불러오게되어있다.







 크롬 개발자 도구에서 ajax 로딩파일을 찾음



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class crawling {
 
    public static void main(String[] args) {
        try {            
            Document doc = Jsoup.connect("http://search.danawa.com/ajax/getProductList.ajax.php")
                    .header("Origin""http://search.danawa.com")
                    .header("Referer""http://search.danawa.com/")
                    .data("query""잘만").post();
            
            Elements items = doc.select("li.prod_item");
            
            for (Element item : items) {
                System.out.println(item.html());
                System.out.println(" ");
            }            
        } catch (Exception e) {e.printStackTrace();}
    }
}
 
cs



POINT!

1. Jsoup.connect(url)  url 연결.

2. .header("request header ", "value") 값으로 대입.

3. .data("key", "value") 값 대입.

4. 여기서 post() 로 호출하는 거랑 get()의 차이가 있다.

5. HTML DOM 으로 css selector 를 구한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package mailsend;
 
import java.util.Properties;
 
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
public class mailsend {
    public static void main(String[] args) {
        final String user = "email@gmail.com";
        final String password = "password";
        
        Properties prop = new Properties();
        prop.put("mail.smtp.host""smtp.gmail.com");
        prop.put("mail.smtp.port"465);
        prop.put("mail.smtp.auth""true");
        prop.put("mail.smtp.ssl.enable""true");
        prop.put("mail.smtp.ssl.trust""smtp.gmail.com");
        
        Session session = Session.getDefaultInstance(prop, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(user, password);
            }
        });
        
        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(user));
            
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("email@naver.com"));
            
            message.setSubject("메일 테스팅중....!");
            message.setText("메일 내용 테스트");
            
            Transport.send(message);
            System.out.println("message sent successfully....");            
            
            
        } catch (AddressException e) {
            // TODO: handle exception
            e.printStackTrace();
        } catch (MessagingException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        
    }
}
 
cs



메일 수신 확인..





해당 글은 다시한번 정리해서 소스리뷰 및 설명을 포스팅 하겠습니다.


1. Jsoup 라이브러리 다운


  • https://jsoup.org/download 에서 최신버전 다운로드



2. 이클립스 라이브러리 추가




  • Eclipse Java project에서 Java Build Path - Add External JARs로 Jsoup.jar 라이브러리를 추가해준다.

  • 라이브러리 추가 하면 Package Explorer Referenced Libraries 폴더가 생성되면서 Jsoup 라이브러리가 import 된다.


3. 간단한 예제로 다나와 사이트의 오늘의 특가정보를 가져와보자.




  • 간단한 파싱을 위해 다나와에서 오늘의 특가를 파싱해본다.

  • 구글 크롬 개발자 도구를 통해 해당 뉴스 부분의 제목이나 class id를 확인 할 수 있다.

  • 개발자 도구를 통해 파싱하고 싶은 부분의 class id, tag 등을 먼저 찾는다.

  • Jsoup.connect() : 파싱할 웹 사이트 URL을 입력해 파싱 데이터가 Document 형태로 반환된다.





  • text()로 해당 li 태그의 title 값을 얻어올 수 있다.

  • getElementsByAttribute("href").attr("href")로 href 태그 값을 얻어와 해당 URL을 얻어올 수 있다.

  • URL을 다시 Jsoup.connect()해 링크를 들어간다면, 본문을 크롤링 할 수 있을 것이다.

  • element.toString()은 파싱한 태그 값 전체를 출력하고, element.text()는 파싱한 태그의 title 값만 출력할 수 있다.





+ Recent posts