티스토리 뷰

Jsoup 을 이용한 영어 단어 정보 Parsing

 이번에는 Android 에서 Jsoup 을 이용하여 다음 단어사전 Page를 Parsing 하여 단어의 정보들을 가져오는 방법에 대해서 알아보겠습니다.

 일단 Jsoup을 사용하기 위해서는 gradle 에 다음과 같이 dependencies 를 줘야 합니다.

1
2
3
4
5
dependencies {
   
    compile 'org.jsoup:jsoup:1.9.2'
 
}
cs

 그럼 이제부터는 Jsoup 을 사용할수 있게 됩니다. 아래의 코드는 단어를 받아 단어의 뜻, 발음기호, 예문, 예문 해석, 발음 음성 파일을 
Parsing 해오는 코드 입니다.



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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
public class ParseDictionary {
 
    private Elements mean;
    private String[] example_arr;
    private String[] example_mean_arr;
    private Context mContext;
 
    public String word;
    public String pron;
    public String audioPath;
    
 
    public ParseDictionary(Context context) {
        mContext = context;
    }
 
    public boolean getParsingData(String data) {
        word = data.toLowerCase();
        String url = "http://dic.daum.net/search.do?q=" + data + "&dic=eng&search_first=Y";
 
        Document doc = null;
 
        try {
            doc = Jsoup.connect(url).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        if (doc != null) {
            //#mArticle > .search_cont > .card_word > .search_box >
            Element element = doc.select(".cleanword_type > .search_cleanword > .tit_cleansch > .txt_cleansch >span").first();
 
            try {
                if (!word.equals(element.text().replaceAll(" """))) {            //정상적인 단어가 아닐 때
                    return false;
                }
            } catch (NullPointerException e) {
                return false;
            }
 
            mean = doc.select(".cleanword_type > .list_search > li > .txt_search");       //뜻 Parsing
 
            Element pronounce = doc.select(".cleanword_type > .wrap_listen > .desc_listen > .txt_pronounce").first();        //발음 Parsing
            if (pronounce != null) pron = pronounce.text();
 
            Elements example = doc.select(".card_word > .cont_example > .list_example > li > .box_example > .txt_example > .txt_ex");        //예문 Parsing
            Elements example_mean = doc.select(".card_word > .cont_example > .list_example > li > .box_example > .mean_example > .txt_ex");        //예문 해석 Parsing
            if (example != null) {
                example_arr = new String[example.size()];
 
                int cnt = 0;
                for (Element e : example) {
                    example_arr[cnt++= e.text();
                }
            }
            if (example_mean != null) {
                example_mean_arr = new String[example_mean.size()];
 
                int cnt = 0;
                for (Element e : example_mean) {
                    example_mean_arr[cnt++= e.text();
                }
            }
 
            try {
                int count;
                Element title = doc.select(".cleanword_type > .wrap_listen > .desc_listen > a").first();
 
                if (title != null) {
                    audioPath = title.attr("href");                    //발음  Parsing
                    URL req = null;
                    URLConnection connection = null;
                    req = new URL(audioPath);
                    connection = req.openConnection();
                    connection.connect();
                    int lengthOfFile = connection.getContentLength();
                    File audioForder = new File(mContext.getFilesDir() + "/audio/");
 
                    if (!audioForder.exists()) {
                        audioForder.mkdir();
                        new File(audioForder.getPath() + ".nomedia");
                    }
                    audioPath = audioForder.getPath() + "/" + data + ".mp3";
 
                    InputStream input = new BufferedInputStream(req.openStream());
                    OutputStream output = new FileOutputStream(audioPath);
 
                    byte audio[] = new byte[1024];
 
                    long total = 0;
 
                    while ((count = input.read(audio)) != -1) {
                        total += count;
                        output.write(audio, 0, count);
                    }
 
                    output.flush();
                    output.close();
                    input.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
 
            if (mean == null) {
                return false;
            }
 
            createJson();
            insertDB();
 
            return true;
        }
 
        return false;
       }
}
cs


반응형
댓글